Promise.allSettled 返回所有 Promise 的最终状态数组,需先判 status 再取 value 或 reason;可 filter+map 分别提取成功值和失败原因,且不因任一拒绝而中断执行。

Promise.allSettled 会等待所有 Promise 完成(无论成功或失败),然后返回一个包含每个 Promise 最终状态和结果的数组,你直接遍历这个数组就能拿到全部结果。
返回值结构很明确
它返回的是一个数组,每个元素都是形如 { status: 'fulfilled' | 'rejected', value?: any, reason?: any } 的对象:
- 如果原 Promise 成功,对应项是
{ status: 'fulfilled', value: 实际返回值 } - 如果原 Promise 失败,对应项是
{ status: 'rejected', reason: 错误对象 }
怎么安全提取所有 value 和 reason
不能直接解构 value 或 reason,得先判断 status:
const promises = [
Promise.resolve(42),
Promise.reject(new Error('oops')),
Promise.resolve('hello')
];
Promise.allSettled(promises).then(results => {
results.forEach((result, i) => {
if (result.status === 'fulfilled') {
console.log(`第 ${i} 个成功:`, result.value);
} else {
console.log(`第 ${i} 个失败:`, result.reason.message);
}
});
});
想分别收集成功值和失败原因?可以过滤
用 filter + map 很方便:
- 所有成功值:
results.filter(r => r.status === 'fulfilled').map(r => r.value) - 所有失败原因:
results.filter(r => r.status === 'rejected').map(r => r.reason)
注意:它不会因为某个 Promise 拒绝而中断
这和 Promise.all 不同——allSettled 总是等全部结束,哪怕第一个就报错,其余仍会继续执行并计入结果。适合“批量操作、不希望一个失败拖垮全部”的场景,比如同时发多个请求并汇总反馈。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











