Я хочу, чтобы l oop работал параллельно, но для каждого элемента сначала должен выполняться fxn A, а затем fxn B.
То, что у вас есть, будет делать это. .forEach()
l oop сам не будет ждать await
, потому что .forEach()
не знает обетования. Таким образом, .forEach()
l oop просто запустится до завершения, запустив каждую из ваших oop итераций (по порядку), так что все они будут "в полете" одновременно. Они начнутся по порядку, но при одновременном запуске в полете они могут завершиться в любом порядке (это определяется целевым сервером).
Но, как вы это делаете, вот так у вас нет никакого способа общения за пределами l oop ни для ошибок, ни для результатов, ни даже для завершения.
По этой причине, как правило, лучше (когда вы хотите запустить вещи параллельно) соберите массив обещаний и следите за его выполнением с помощью Promise.all()
. Это даст вам все три вещи, которые вам не хватает:
- Уведомление о завершении
- Правильная обработка ошибок
- Сбор результатов в порядке
Вы можете сделать это так:
let promises = [1,2,3].map(async(i) => {
let resultA = await A(i);//which call API & console & returns iA
let resultB = await B(i);//which call API & console & returns iB
console.log('A & B Completed for '+ i)
return someValue;
});
Promise.all(promises).then(results => {
console.log(results);
}).catch(err => {
console.log(err);
});