ES9 中的 promise.allSettled() 方法详解

阅读时长 4 分钟读完

在 ES9 中,新增了一个 promise.allSettled() 方法。这个方法可以接收一个 Promise 对象的数组作为参数,返回一个新的 Promise 对象。当数组中的所有 Promise 对象都已经 settled(即 fulfilled 或 rejected)时,返回的 Promise 对象就会 resolve。返回的结果是一个对象数组,每个对象都包含了对应的 Promise 对象的状态和结果。

方法语法

其中,iterable 是一个可迭代的对象,比如数组。

方法示例

下面是一个使用 promise.allSettled() 方法的例子:

上面的代码中,我们定义了一个包含三个 Promise 对象的数组。其中,第一个和第三个 Promise 对象都是成功的,而第二个 Promise 对象是失败的。我们使用 promise.allSettled() 方法来处理这个数组,然后在控制台输出结果。

输出结果如下:

可以看到,返回的结果是一个对象数组。每个对象都包含了对应的 Promise 对象的状态和结果。其中,状态有两种可能:fulfilled 和 rejected。如果 Promise 对象成功了,那么状态就是 fulfilled,同时 value 属性就是 Promise 对象的返回值;如果 Promise 对象失败了,那么状态就是 rejected,同时 reason 属性就是 Promise 对象的错误信息。

使用场景

promise.allSettled() 方法的出现,主要是为了解决 Promise.all() 方法的一些缺陷。Promise.all() 方法用于处理多个 Promise 对象,只有当所有 Promise 对象都成功了,才会返回成功;如果有一个 Promise 对象失败了,就会直接返回失败。这种情况下,如果我们需要获取所有 Promise 对象的状态和结果,就会比较困难。

比如,假设我们有一个需求:从多个 API 接口中获取数据,如果其中有一个接口失败了,就不影响其他接口的返回结果。这时候,就可以使用 promise.allSettled() 方法来实现:

-- -------------------- ---- -------
----- ---- - -
  --------------------------------
  --------------------------------
  ----------------------------------
--

----- -------- - ------------ -- ------------

----------------------------
  ------------- -- -
    ---------------------- -- -
      -- -------------- --- ------------ -
        --------------------------
      - ---- -
        ---------------------------
      -
    ---
  ---

上面的代码中,我们定义了一个包含三个 API 接口的数组。然后我们使用 fetch() 方法来获取这些接口的数据,并把返回的 Promise 对象存储在 promises 数组中。接着,我们使用 promise.allSettled() 方法来处理这个数组,并在控制台输出所有 Promise 对象的状态和结果。

总结

ES9 中的 promise.allSettled() 方法可以帮助我们处理多个 Promise 对象的状态和结果,特别是在其中有一个 Promise 对象失败了的情况下。这个方法的出现,使得我们可以更加方便地获取所有 Promise 对象的状态和结果,从而更好地处理异步操作。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650a4cd695b1f8cacd4a5300

纠错
反馈