1 回答
TA贡献1775条经验 获得超11个赞
事件监听下,你的问题应该是在于无法控制异步读的顺序,不知道哪个文件先读完:
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
const fs = require('fs')
var readFile = function (fileName) {
return new Promise(function (resolve, reject) {
fs.readFile(fileName, 'utf8', function (error, data) {
if (error) return reject('出错啦' + error);
resolve(data);
});
});
};
var getData = function() {
var files=['./data1.js', './data2.js', './data3.js']
var result=[];
//打印最终的结果
myEmitter.on('done', () => {
console.log('触发了一个事件!');
console.log(result)
});
let index = 0;
myEmitter.on(`index`, () => {
(async () => {
try {
var data = await readFile(files[index]);
console.log(data); // 循环打印出3个文件的内容
result.push(data);
if (index == (files.length - 1)) { //操作完毕,触发结束事件
myEmitter.emit('done');
} else {
index++;
myEmitter.emit(`index`);
}
} catch (error) {
console.log(error);
}
})();
});
myEmitter.emit(`index`);
}
getData()
另外 promise.all 也是可以解决的,因为其返回的结果数组与你的文件顺序是一一对应的。
添加回答
举报