Promise.allSettled 返回始终 resolve 的数组,每项含 status、value 或 reason;可并发执行所有异步操作并完整获取成功与失败结果,无需 try/catch 单个 promise 或用 Promise.all。

直接用 await Promise.allSettled([...promises]) 就能拿到所有异步操作的最终状态(fulfilled 或 rejected),不因某一个失败而中断,也不丢失任何结果。
理解 allSettled 的返回结构
Promise.allSettled 返回一个 Promise,它始终会 resolve,其值是一个数组,每个元素都是形如 { status: 'fulfilled' | 'rejected', value | reason } 的对象。注意:
- 成功时有 value 字段,无 reason
- 失败时有 reason 字段,无 value
配合 await 拿到完整切面数据
只需在 async 函数中 await 它,就能同步获取全部结果:
- 避免用
Promise.all—— 它一错就全崩,拿不到其余成功项 - 不用 try/catch 包裹单个 promise —— 那样写法冗余,且难以统一收口
- 把多个异步请求(如 API 调用、定时任务、文件读取)放进数组,直接传给
allSettled
按状态分类处理结果
拿到结果数组后,可快速拆解为成功/失败两组:
const fulfilled = results.filter(r => r.status === 'fulfilled').map(r => r.value)const rejected = results.filter(r => r.status === 'rejected').map(r => r.reason)- 也可用 reduce 一次遍历完成分类,更高效
常见陷阱提醒
不要 await 单个 promise 后再 push 到数组里 —— 这会串行执行,失去并发优势。
别把 allSettled 当作错误兜底替代品 —— 它不抛错,所以外层 try/catch 捕不到;需主动检查 status。
注意浏览器兼容性:IE 不支持,Node.js 12.9+、现代浏览器均支持。

















