ES10 中的 Promise.allSettled 方法实例详解

阅读时长 4 分钟读完

在 ES10 中,Promise.allSettled 方法被引入了。该方法用于处理一组 Promise 对象,它返回的是一个 Promise 对象,该 Promise 对象在所有的 Promise 对象的状态都被解决后才会解决。与 Promise.all 方法返回的 Promise 对象的不同之处在于,如果有Promise对象的状态为 rejected,Promise.all 方法将会立即停止执行,并返回一个 rejected 状态的 Promise 对象,而 Promise.allSettled 方法会等待所有 Promise 对象的状态被解决。

Promise.all 和 Promise.allSettled 的比较

让我们来看一下 Promise.all 方法和 Promise.allSettled 方法之间的比较。

Promise.all 特点

  • Promise.all 方法在所有 Promise 对象的状态均为解决态时返回一个 resolved 状态的 Promise 对象,并且该 Promise 对象的状态被解决时,它的结果值是一个数组,该数组包含了所有 Promise 对象的结果值。

  • 如果其中有任意一个 Promise 对象的状态是非解决态的,那么 Promise.all 方法将立即停止执行,并返回一个 rejected 状态的 Promise 对象,并且它的结果值是第一个被 rejected 的 Promise 对象的结果值。

Promise.allSettled 特点

  • Promise.allSettled 方法返回一个 Promise 对象,在它的所有 Promise 对象的状态都被解决后,该 Promise 对象的状态被解决,并且它的结果值是一个数组,该数组包含了所有 Promise 对象的结果值,不论其状态是解决态或是非解决态。

  • 如果其中有任意一个 Promise 对象的状态是非解决态的,Promise.allSettled 方法仍然将继续执行,并等待所有 Promise 对象的状态被解决,并且它的结果值是一个对象数组,该数组包含了所有 Promise 对象的状态和对应的结果值。

Promise.allSettled 方法的使用

让我们来看一个具体的使用场景,以加深对 Promise.allSettled 方法的理解。

假设我们需要对多个 Promise 对象进行处理,并将它们的结果合并成一个结果数组。考虑使用 Promise.allSettled 方法来解决这个问题。

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

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

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

    ---------------------- ---------- ------------------
    --------------------- ---------- -----------------
  ---
展开代码

上面的代码会输出如下结果:

在这个例子中,我们创建了一个包含三个 Promise 对象的数组,其中一个是已解决态的 Promise 对象,一个是非解决态的 Promise 对象,还有一个是已解决态的 Promise 对象。我们使用 Promise.allSettled 方法来处理该数组,并将其结果分别存储在两个数组中,一个数组存储已解决态的 Promise 对象的结果值,另一个数组存储非解决态的 Promise 对象的 reason。

小结

在 ES10 中,Promise.allSettled 方法被引入了,它用于处理一组 Promise 对象,并返回一个 Promise 对象,在所有的 Promise 对象的状态被解决后该 Promise 对象的状态才被解决。与 Promise.all 方法返回的 Promise 对象不同之处在于,如果有 Promise 对象的状态被 rejected,Promise.all 方法将会立即停止执行,并返回一个 rejected 状态的 Promise 对象,而 Promise.allSettled 方法会等待所有 Promise 对象的状态被解决。

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

纠错
反馈

纠错反馈