Promise.allSettled()

基线 广泛可用

此功能已得到良好建立,并且在许多设备和浏览器版本上都能正常工作。它自以下时间在各个浏览器中可用 2020 年 7 月.

**Promise.allSettled()** 静态方法接受可迭代的 promises 作为输入,并返回单个 Promise。此返回的 promise 在所有输入的 promises 解决时(包括传递空可迭代时)满足,并带有一个描述每个 promise 结果的对象数组。

试一试

语法

js
Promise.allSettled(iterable)

参数

iterable

一个 可迭代对象(例如 Array)的 promises。

返回值

一个 Promise,它是

  • **已满足的**,如果传递的 iterable 为空。
  • **异步满足的**,当给定 iterable 中的所有 promises 都已解决(已满足或已拒绝)时。满足值是一个对象数组,每个对象都描述 iterable 中一个 promise 的结果,按照传递 promises 的顺序排列,与完成顺序无关。每个结果对象都具有以下属性
    status

    一个字符串,可以是 "fulfilled""rejected",表示 promise 的最终状态。

    value

    仅在 status"fulfilled" 时出现。promise 满足时的值。

    reason

    仅在 status"rejected" 时出现。promise 被拒绝的原因。

    如果传递的 iterable 非空,但没有包含任何挂起的 promises,则返回的 promise 仍然是异步(而不是同步)满足的。

描述

Promise.allSettled() 方法是 promise 并发 方法之一。Promise.allSettled() 通常用于您有多个异步任务需要完成,它们彼此之间不依赖,或者您始终想要知道每个 promise 的结果。

相比之下,Promise.all() 返回的 Promise 可能更适合任务相互依赖,或者您希望在其中任何一个拒绝时立即拒绝。

示例

使用 Promise.allSettled()

js
Promise.allSettled([
  Promise.resolve(33),
  new Promise((resolve) => setTimeout(() => resolve(66), 0)),
  99,
  Promise.reject(new Error("an error")),
]).then((values) => console.log(values));

// [
//   { status: 'fulfilled', value: 33 },
//   { status: 'fulfilled', value: 66 },
//   { status: 'fulfilled', value: 99 },
//   { status: 'rejected', reason: Error: an error }
// ]

规范

规范
ECMAScript 语言规范
# sec-promise.allsettled

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅