promise.allsettled 是等待所有 promise 完成(无论成功或失败)并返回各状态对象的并发处理方法,返回值恒为 fulfilled,含 status、value(成功时)或 reason(失败时)。

Promise.allSettled 是 JavaScript 中用于并发执行多个 Promise 并**等待全部完成(无论成功或失败)**的方法。它不会像 Promise.all 那样因一个失败就整体拒绝,而是返回每个 Promise 的最终状态(fulfilled 或 rejected),适合需要“不中断、全收集”的场景。
基本用法:传入 Promise 数组,返回状态对象数组
它接收一个可迭代对象(通常是 Promise 数组),返回一个新 Promise,该 Promise 在所有输入 Promise 都 settle(即完成或失败)后兑现,值为一个对象数组,每个对象包含:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
status:字符串
"fulfilled"或"rejected" - value(仅当 status === "fulfilled"):对应 Promise 的返回值
- reason(仅当 status === "rejected"):对应 Promise 的拒绝原因
示例:
const p1 = Promise.resolve(42);const p2 = Promise.reject(new Error("网络错误"));
const p3 = fetch("/api/user").then(r => r.json());
Promise.allSettled([p1, p2, p3])
.then(results => {
results.forEach((result, i) => {
if (result.status === "fulfilled") {
console.log(`任务 ${i} 成功:`, result.value);
} else {
console.log(`任务 ${i} 失败:`, result.reason);
}
});
});
常见使用场景
- 批量请求且需知道每个结果:比如同时拉取多个用户资料,即使某几个失败,也要展示其余成功数据
- 清理/兜底逻辑:在 finally 之外,明确区分哪些操作真正完成了、哪些被拒绝了
- 避免 Promise.all 的“短路”问题:当任意一个 Promise 失败导致整个链路中断时,改用 allSettled 可保全流程继续
与 Promise.all 和 Promise.race 的关键区别
- Promise.all:全部成功才 resolve;任一 reject 就立即 reject —— 强一致性,但容错差
- Promise.race:谁先 settle(无论成败)就用谁的结果 —— 关注响应速度,不关心其余
- Promise.allSettled:等全部 settle 后统一返回每个结果的状态 —— 关注完整性与可观测性
实用小技巧
- 可用
Array.from({ length: n }, () => fetch(...))快速生成多个请求 Promise - 配合解构快速提取成功结果:
results.filter(r => r.status === "fulfilled").map(r => r.value) - 对失败项做统一日志上报:
results.filter(r => r.status === "rejected").forEach(r => reportError(r.reason)) - 注意:allSettled 返回的 Promise 总是 fulfilled(不会 rejected),所以通常只用
.then(),不用.catch()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










