Promise.all() 和 Promise.allSettled()的区别

特性 Promise.all() Promise.allSettled()
失败时行为 任意一个 Promise 失败后立即终止,返回第一个错误 等待所有 Promise 完成(无论成功或失败)
返回值 成功时返回结果数组;失败时返回第一个错误 始终返回对象数组,每个对象包含 status(状态)和 value(成功值)或 reason(错误)
适用场景 需要所有 Promise 必须成功(如并行请求依赖全部结果的场景) 需要记录所有 Promise 的最终状态(如批量任务监控、容忍部分失败的场景)
代码示例 ```js ```js
Promise.all([p1, p2, p3]) Promise.allSettled([p1, p2, p3])
.then(results => {}) .then(results => {
.catch(error => {}); results.forEach(result => { /* 处理每个状态 */ });
``` });
```
结果示例 全部成功:[result1, result2, result3] 始终返回对象数组,例如:
失败时:Error(reason) [ {status: 'fulfilled', value: result1}, {status: 'rejected', reason: error}, ... ]
兼容性 ES6(广泛支持) ES2020+(旧环境可能需要 polyfill)

假设有三个 Promise:

const p1 = Promise.resolve('成功1');
const p2 = Promise.reject('失败');
const p3 = Promise.resolve('成功2');
Promise.all([p1, p2, p3])

立即因 p2 失败而终止,进入 .catch(),输出 '失败'
Promise.allSettled([p1, p2, p3])

返回
[
  { status: 'fulfilled', value: '成功1' },
  { status: 'rejected', reason: '失败' },
  { status: 'fulfilled', value: '成功2' }
]

关键总结
Promise.all():适合“全有或全无”场景,任一失败则整体失败。
Promise.allSettled():适合需要容忍部分失败并获取完整结果的场景。

你可能感兴趣的:(#,JavaScript,前端,javascript,开发语言)