我想遍历一个数组,它将new Thing
推到列表中,在Thing内部它执行一些自己的异步调用。我如何以同步方式迭代数组,因为callback
要求列表中的数据正常工作。由于我的for循环是同步的并且执行了一些异步调用,所以如果完成了调用,则在列表之前调用该回调。nodejs通过异步调用数组循环?
我不知道我将如何通过数组进行迭代,并完成所有的工作做回调
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);
});
}