当前位置:首页 > 文章列表 > 文章 > 前端 > Promise.allSettled获取所有结果方法解析

Promise.allSettled获取所有结果方法解析

2026-05-12 14:43:18 0浏览 收藏
Promise.allSettled 是 JavaScript 中处理并行异步任务的利器,它能稳健地等待所有 Promise 完成(无论成功或失败),并完整返回每个任务的终态详情(status、value 或 reason),彻底避免了 Promise.all 因单点失败而中断执行和丢失结果的痛点;无论是需要分层处理成功与失败数据、精准定位出错位置,还是实现优雅降级与兜底提示,它都提供了简洁可靠的解决方案,是现代前端开发中应对复杂并发场景不可或缺的核心工具。

JavaScript中Promise-allSettled获取所有结果方案

Promise.allSettled 是 JavaScript 中用于并行执行多个 Promise 并**收集全部结果(无论成功或失败)**的标准方案,适合需要“不因单个失败而中断、且必须拿到每个任务终态”的场景。

它和 Promise.all 的核心区别

Promise.all:任一 Promise 拒绝(reject),整个 Promise 立即拒绝,其余未完成的可能被丢弃(实际仍在运行,但结果不可见);只返回成功值数组。
Promise.allSettled:等待所有 Promise 都进入终态(fulfilled 或 rejected),返回一个对象数组,每个对象含 status("fulfilled" / "rejected")、valuereason 字段。

基本用法与返回结构

```js
const promises = [
Promise.resolve(42),
Promise.reject(new Error('Oops')),
Promise.resolve('hello')
];

Promise.allSettled(promises)
.then(results => {
console.log(results);
// [
// { status: 'fulfilled', value: 42 },
// { status: 'rejected', reason: Error('Oops') },
// { status: 'fulfilled', value: 'hello' }
// ]
});
```

常用处理模式

分离成功与失败结果
```js
const results = await Promise.allSettled(promises);
const fulfilled = results.filter(r => r.status === 'fulfilled').map(r => r.value);
const rejected = results.filter(r => r.status === 'rejected').map(r => r.reason);
```
带索引的错误定位:配合 map((r, i) => ({ ...r, index: i })),便于知道第几个请求出错。
统一兜底逻辑:例如所有请求都失败时提示“网络异常”,部分失败时仍渲染可用数据。

兼容性与降级方案

• 原生支持:Chrome 76+、Firefox 71+、Safari 13.1+、Node.js 12.9+。
• 旧环境需 polyfill,可用 promise.allsettled npm 包,或手动实现(基于 Promise.all + 错误捕获包装):
```js
function allSettled(promises) {
return Promise.all(
promises.map(p =>
Promise.resolve(p).then(
value => ({ status: 'fulfilled', value }),
reason => ({ status: 'rejected', reason })
)
)
);
}
```

好了,本文到此结束,带大家了解了《Promise.allSettled获取所有结果方法解析》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多文章知识!

Python Tkinter显示Emoji问题解决方法Python Tkinter显示Emoji问题解决方法
上一篇
Python Tkinter显示Emoji问题解决方法
volatile不能保证原子性,i++存在并发风险
下一篇
volatile不能保证原子性,i++存在并发风险
查看更多
最新文章