最佳答案
我正在使用 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
有5个承诺,而第一个完成的返回一个 reject()
,那么其他4个实际上被取消,它们承诺的 resolve()
值丢失。
还有第三种方法吗? 在这种方法中,执行有效地并行执行,但一次失败不会破坏整个过程?