【发布时间】:2013-12-17 10:58:44
【问题描述】:
所以我有一个很好的嵌套异步代码块一起运行,这一切似乎都很好,除了当我到达它的末尾时。我在系列块中的最后一个函数是 forEach: 然后进入 async.parallel
设法追踪以下未按顺序运行的块:
async.forEach(array, function(elem, callback) {
async.parallel([
function(callback) {
database-call-A(elem, unction(err, data) {
if(err){
console.log("error on first parallel");
callback({err: false}); // will break out
} else {
elem.c = data;
callback();
}
});
},
function(callback) {
database-call-B(elem, function(err, data) {
if(err){
console.log("error on first parallel");
callback({err: false}); // will break out
} else {
elem.c = data;
callback();
}
});
}
]); // end async.parallel
// if forEach needs a callback after every iteration (which I think it does?)
console.log("PRINTS N TIMES - ONCE FOR EVERY ITERATION");
callback(); // both parallel functions have run, call back forEach
}); // end forEach
console.log("Donions - prints when finished");
当我通过到处抛出打印语句来测试这段代码时,我注意到“PRINTS N TIMES ...”运行了 N 次,然后我得到“Donions ..”然后我做某事();和其他东西();开始在我的 async.parallel 中被调用。
为什么我的 forEach 在不等待来自 async.parallel 的回调的情况下进行迭代?
【问题讨论】:
标签: javascript asynchronous foreach