5月30日 10:11

Promise.all 和 Promise.race 有什么区别?

Promise.all 等“全部成功”,Promise.race 等“第一个完成”。all 会并行启动所有 Promise,只有全部 fulfilled 才 fulfilled,结果数组顺序和传入顺序一致;任意一个 rejected,整体立刻 rejected。race 也是并行启动,但谁先 settled 就采用谁的结果,不管成功还是失败。

追问

all 和 race 的返回值有什么不同?

all 返回结果数组;race 返回第一个完成的值或错误。

all 里有一个失败,其他请求会取消吗?

不会。all 只是让返回的 Promise 变成 rejected,已经发出去的请求仍会继续,除非额外用 AbortController 取消。

空数组会怎样?

Promise.all([]) 立即 fulfilled,值是 []Promise.race([]) 会一直 pending。

allSettled 和 any 什么时候用?

想知道每个任务成败,用 allSettled;只要任意一个成功就够,用 any

写段代码

javascript
const timeout = new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), 3000) ); Promise.race([fetch('/api/data'), timeout]).catch(console.error); Promise.all([fetch('/a'), fetch('/b')]);
标签:Promise