Promise.allSettled用于等待所有Promise完成并返回各自状态结果,返回值为全 fulfilled 的数组,每个元素含 status 和 value/reason,适合容错批量操作。

Promise.allSettled 专门用于等待所有 Promise 完成(无论成功或失败),并返回每个 Promise 的执行结果和状态,不会因某个 Promise 拒绝而中断。
返回值结构:每个结果都是带 status 的对象
它返回一个 Promise,该 Promise 总是 fulfilled(不会 rejected),其值是一个数组,数组中每个元素对应传入的 Promise,格式统一为:
- { status: 'fulfilled', value: 返回值 } —— 对应 resolve 的 Promise
- { status: 'rejected', reason: 错误对象 } —— 对应 reject 的 Promise
基本用法示例
比如同时请求三个接口,部分可能失败,但仍要拿到全部响应信息:
const p1 = fetch('/api/user').then(r => r.json());
const p2 = fetch('/api/posts').then(r => r.json());
const p3 = Promise.reject(new Error('Timeout'));
Promise.allSettled([p1, p2, p3])
.then(results => {
results.forEach((result, index) => {
if (result.status === 'fulfilled') {
console.log(`Promise ${index} 成功:`, result.value);
} else {
console.log(`Promise ${index} 失败:`, result.reason.message);
}
});
});
与 Promise.all 和 Promise.race 的关键区别
- Promise.all:只要有一个 rejected,整个就立即 rejected,不等其余完成
- Promise.race:只返回第一个 settled(fulfilled 或 rejected)的 Promise 结果
- Promise.allSettled:一定等到全部结束,且结果包含每个 Promise 的最终状态,适合容错批量操作
实用场景建议
- 批量提交表单或日志上报,需知道每项是否成功,而非“全成功才继续”
- 初始化多个异步依赖(如配置、权限、用户数据),部分缺失可降级处理
- 测试中验证多个异步行为是否按预期完成(不管成败)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











