2026年5月30日 02:24

Promise.allSettled() 有什么作用?和 Promise.all 有什么区别?

Promise.allSettled() 会等待一组 Promise 全部结束,不管成功还是失败,最后返回每个任务的状态和结果;Promise.all() 则要求全部成功,只要一个 reject 就立刻 reject。面试里一句话区分:all 适合“缺一个都不行”,allSettled 适合“尽量都跑完,再分别处理结果”。例如批量请求、批量上传、页面多个独立模块加载,更适合 allSettled。

追问

allSettled 返回值长什么样?

每一项都有 status。成功是 { status: 'fulfilled', value },失败是 { status: 'rejected', reason }

allSettled 会吞掉错误吗?

不会吞,只是把错误包装进结果数组。你仍然要检查 rejected 项,否则失败会被业务层忽略。

什么时候不能用 allSettled?

任务之间有强依赖时不适合。比如用户信息失败后,后续请求必须停止,这时用 all 或串行 await 更清楚。

和给每个 Promise 单独 catch 有什么区别?

单独 catch 可以兼容更老环境,也能自定义返回结构;allSettled 是标准化写法,语义更明确。

写段代码

javascript
const results = await Promise.allSettled([fetchUser(), fetchPosts()]); const ok = results.filter(r => r.status === 'fulfilled').map(r => r.value); const failed = results.filter(r => r.status === 'rejected').map(r => r.reason);
标签:Promise