Promise相关Api

1. Promise.all(全部成功才成功,有一个失败就立即失败(短路))

Promise.all([p1, p2, p3])
所有都 fulfilled → 返回所有结果数组
 任意一个出错(reject)→ 立刻 reject,其他不再等待

常见 bug:只要一个接口 500 就全部中断

适用场景:

所有请求必须成功才能继续(例如:进入页面时同时加载 3 个关键数据)

 

2. Promise.allSettled (不管成功失败都等全部执行完,不会短路)

Promise.allSettled([p1, p2, p3])

返回格式:

[ { status: "fulfilled", value: xxx }, { status: "rejected", reason: xxx }, ]

适用场景:

希望所有任务都执行完

某个失败不影响后续逻辑(

例如:多个请求并发,即使部分失败也给用户显示已有数据)

 

3. Promise.race(谁先结束就用谁的结果(无论成功还是失败)

Promise.race([p1, p2, p3])
第一个 fulfilled → 整个 race fulfilled
第一个 rejected → 整个 race rejected

适用场景:

超时控制

例如:function timeout(p, ms) { return Promise.race([ p, new Promise((_, reject) => setTimeout(() => reject("timeout"), ms)) ]); }

 

4. Promise.any(只要有一个成功就成功,全部失败才失败

Promise.any([p1, p2, p3])
 只要一个 fulfilled → 整体 fulfilled
 全部 rejected → 才会 reject(AggregateError)

适用场景:

多源数据(例如:多个备用 API,谁先成功用谁)

接口容灾、兜底

举例:

Promise.any([ fetch('/api1'), fetch('/api2'), fetch('/api3'), ])

 

结论:

必须全部成功 → Promise.all

即使失败也要全部执行 → Promise.allSettled

只等第一个接口 → Promise.race

多备份接口取最快成功 → Promise.any

 

API成功条件失败条件是否等待全部
Promise.all 全部成功 一个失败就失败
Promise.allSettled 不关心 不关心 ✔️
Promise.race 第一个成功 第一个失败 ❌(只等第一个)
Promise.any 一个成功 全部失败

posted on 2025-11-26 16:52  sss大辉  阅读(1)  评论(0)    收藏  举报

导航