Я использую 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 не работает быстро: если у вас есть четыре promises, которые разрешаются после тайм-аут, и один немедленно отклоняется, тогда Promise.all отклоняет немедленно.
Как я читал, если я Promise.all
с 5 promises, а первый для завершения возвращает a reject()
, то остальные 4 будут эффективно отменены и их обещанные значения resolve()
будут потеряны.
Есть ли третий способ? Где выполнение эффективно параллельно, но один отказ не портит всю связку?