【发布时间】:2017-05-10 15:03:34
【问题描述】:
我正在尝试遍历一个数组,该数组将new Thing 推送到一个列表中,在它内部它会执行一些自己的异步调用。我将如何以同步方式遍历数组,因为callback 需要列表中的数据才能工作。由于我的 for 循环是同步的并且会进行一些异步调用,因此如果完成,则在列表之前调用回调。
我不知道如何在进行回调之前遍历数组并完成所有工作
load(file, callback) {
fs.readFile(file, (err, fd) => {
var data = JSON.parse(fd);
for(var i of data.array){
this.list.push(new Thing(i.id)); // new Thing is Asynchronous
}
callback(); // Needs a finished list
return;
});
}
解决了:
通过将我的Thing 类转换为同步类,删除对类内函数的异步调用,并首先实例化循环中的所有事物,然后调用 Promise.all 调用该函数,我解决了这个问题:
load(file, callback) {
fs.readFile(file, (err, fd) => {
var data = JSON.parse(fd);
for(var i of data.array){
this.list.push(new Thing(i.id));
}
Promise.all(this.list.map(i => i.load()).then(callback);
});
}
【问题讨论】:
标签: javascript node.js