Как перебрать кучу элементов и выполнить некоторые асинхронные задачи и дождаться их всех?
for (const item of items) {
Promise.all([item.someAsync1, item.someAsync2]]).then(res => {
const [res1, res2] = res;
doSomeSyncStuffWithRes1AndRes2();
}).catch(err => console.log(err));
}
console.log('finished'); //I want this to print only after everything has finished.
Я пробовал создать массив обещаний и подтолкнуть к нему все, но это тоже не работает, потому что я использую обещание на каждой итерации?
2 ответа
ОК, думаю, я понял:
const promises = [];
for(const item of items) {
promises.push(this.handleItem(item)); //handle item is the inside of each iteration
}
return Promise.all(promises);
Значит, items - это массив объектов, в которых есть обещания?
Вам нужно будет войти в обратный вызов обещания для одного и выполнить еще один обещание.all для всей коллекции элементов, например:
Promise.all(items.map(item =>
Promise.all([item.1async,item.2async])
.then(completedAsyncItems => doSomething()))
.then(allCompletedItems => console.log())
Похожие вопросы
Новые вопросы
node.js
Node.js - это неблокирующая асинхронная среда ввода-вывода, основанная на событиях, использующая движок Google V8 JavaScript и библиотеку libuv. Он используется для разработки приложений, которые интенсивно используют возможность запуска JavaScript как на клиенте, так и на стороне сервера, и, следовательно, выигрывают от повторного использования кода и отсутствия переключения контекста.
await
перед обещанием?item.someAsync1
? Это функция, которая при вызове возвращает обещание? Или само обещание для уже вызванной функции?