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。
写段代码
javascriptconst 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')]);