Итак, у меня есть хороший кусок вложенного асинхронного кода, который работает, и все кажется, все в порядке, за исключением тех случаев, когда я добираюсь до конца. моя последняя функция в блоке серии является Foreach: что затем переходит в async.parallelс использованием async правильно (с forEach)
Успел выследить следующий кусок, который не запускается в следующем порядке:
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 раз, затем я получил «Дотации ...» и ТОГДА я что-то сделал(); и другие вещи(); начал получать вызов в моем async.parallel.
Почему мой forEach выполняет итерацию, не дожидаясь обратных вызовов от async.parallel?
Вы правы! Я упростил здесь слишком много, проверьте обновление для получения дополнительной информации (мои вызовы db только возвращаются, когда они возвращаются, так что мы хороши на этом фронте). Я почти уверен, что каждый из них является функцией, рассматривающей ее запуск на моем компьютер, но я задаюсь вопросом, почему я никогда не могу найти его в API - посмотрим, все ли что-нибудь сделают .. – gadu
так что же ваша проблема? – jeremija
именно то, что я описал, у меня есть код ПОСЛЕ мой параллельный запуск перед моей параллелью - так что мой код застревает, так как он не будет возвращаться из forEach, потому что эти обратные вызовы уже произошли. – gadu