Как мне ожидать параллельного выполнения нескольких обещаний без «быстрого-безотказного» поведения? [Дубликат]
На этот вопрос уже есть ответ:
Подождите, пока не будут выполнены все обещания ES6, даже отклоненные обещания 15 ответовЯ используюasync
/await
уволить несколькоapi
звонит параллельно:
async function foo(arr) {
const results = await Promise.all(arr.map(v => {
return doAsyncThing(v)
}))
return results
}
Я знаю это, в отличие отloops
, Promise.all
исполняет параллельно (то есть часть ожидания результатов параллельна).
Но Я тоже знаю, что:
Promise.all отклоняется, если один из элементов отклоняется, и Promise.all не выполняется быстро: если у вас есть четыре обещания, которые разрешаются после истечения времени ожидания, и одно отклоняется немедленно, тогда Promise.all отклоняется немедленно.
Как я это читаю, если яPromise.all
с 5 обещаниями, и первое, что закончится, возвращаетreject()
, тогда остальные 4 фактически отменяются и их обещанныеresolve()
значения теряются.
Есть третий путь? Где выполнение эффективно параллельно, но один сбой не портит всю связку?