readline读取文件多次执行时异常
export function readFile(path){
return new Promise(function (resolve, reject) {
let input = fs.createReadStream(path);
const readline = require('readline');
const rl = readline.createInterface({
input: input,
crlfDelay: Infinity
});
let tmpfd;
console.log("准备读取文件了");
input.on('open',(fd)=>{
console.log("打开文件");
console.log(fd);
tmpfd = fd;
});
input.on('error',()=>{
console.log("error");
reject();
});
input.on('close',()=>{
console.log("读取完毕!input");
if(tmpfd){
fs.close(tmpfd,function () {
console.log("fs close");
});
}
resolve();
});
rl.on("line", (line) => {
console.log(line);
});
rl.on('close',function () {
console.log("readline关闭了");
});
});
}
代码如上,第一次调用的时候可以正常的读取完毕,但执行第二次的时候可能就会只打印:准备读取文件了
不知道为啥?求大佬们解惑,谢谢了
5 回复
先格式化下代码吧。
@waitingsong 不好意思哈,写上去看着是好的,保存后缩进符就没了,已经修正了
临近下班来摸鱼,复制了你的代码在node下运行,不管是并行还是穿行还是延时调用第二次,读取同一个文件,都是没问题的。你说在electron下异常,而且还是概率性的,而且打包后竟然概率还会低。这种玄学问题建议还是提供最小复现仓库大家来分析分析。
@HobaiRiku 大佬,快速的多执行几次?
这样试试?
export function readFile(path){
return new Promise(function (resolve, reject) {
const input = fs.createReadStream(path, { autoClose: true, emitClose: true });
const readline = require('readline');
const rl = readline.createInterface({
input: input,
crlfDelay: Infinity
});
console.log("准备读取文件了");
input.on('open',(fd)=>{
console.log("打开文件");
});
input.on('error',()=>{
console.log("error");
reject();
});
input.on('close',()=>{
console.log("读取完毕!input");
resolve();
});
rl.on("line", (line) => {
console.log(line);
});
rl.on('close',function () {
console.log("readline关闭了");
});
});
}