promise.allsettled() 总是返回 fulfilled 的 promise,其值为包含每个输入 promise 状态(fulfilled/rejected)及对应 value 或 reason 的数组,适用于需全量观察结果的场景。

Promise.allSettled() 用于并发执行多个 Promise,并**等待全部完成(无论成功或失败)**,然后返回一个包含每个任务最终状态的数组。它不会因某个 Promise 拒绝而中断,适合需要“全量观察结果”的场景。
基本用法:传入 Promise 数组
接收一个由 Promise 实例组成的可迭代对象(通常是数组),返回一个新的 Promise:
- 该 Promise 总是 fulfilled(不会 rejected)
- 其值是一个数组,每个元素对应输入中对应位置 Promise 的结果对象,结构为:
{ status: 'fulfilled', value: result } 或 { status: 'rejected', reason: error }
常见写法示例
比如同时请求三个接口,不管成败都要知道结果:
const promises = [
fetch('/api/user'),
fetch('/api/posts'),
fetch('/api/config').catch(() => null) // 防止意外 reject 影响整体
];
Promise.allSettled(promises)
.then(results => {
results.forEach((result, index) => {
if (result.status === 'fulfilled') {
console.log(`第${index + 1}个请求成功:`, result.value);
} else {
console.error(`第${index + 1}个请求失败:`, result.reason);
}
});
});
和 all / race 的关键区别
- Promise.all():任一 Promise rejected 就立即 reject,只返回第一个错误;全 fulfilled 才返回值数组
- Promise.race():只返回第一个 settled(fulfilled 或 rejected)的 Promise 结果
- Promise.allSettled():一定等到所有 Promise 都 settled,结果数组里每个都带 status 字段,便于统一处理
实用小技巧
- 想过滤出成功的响应?用
results.filter(r => r.status === 'fulfilled').map(r => r.value) - 想判断是否“全部成功”?
results.every(r => r.status === 'fulfilled') - 搭配
async/await更简洁:const results = await Promise.allSettled([p1, p2, p3]);
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











