所以我有一个嵌套的异步代码运行在一起很好的块,它似乎都没问题,除了当我到它的结尾。我在一系列块最后一个函数是一个foreach:那将会进入async.parallel正确使用async(with for each)
管理追查以下块不为了运行:
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");
当我通过测试此代码我发现,“印刷N次...”跑了N次,然后我得到了“Donions ..”,然后我做了一些事情()。和其他东西();开始在我的async.parallel中调用。
为什么我的forEach迭代不等待async.parallel的回调?
你是对的!我在这里简化了一些,检查更新一点信息(我的数据库调用只回调一次,所以我们在这方面很好) - 我很确定forEach实际上是一个函数,考虑到它的运行在我的电脑,但我想知道为什么我永远无法在API上找到它 - 让我们看看它们是否都能做到。 – gadu
那么你的问题究竟是什么? – jeremija
正是我所描述的,我有我的并行之前并行运行后的代码 - 所以我的代码卡住,因为它不会退出forEach,因为这些回调已经发生。 – gadu