JavaScript 中如何使用 ES10 的 Promise.allSettled() 方法

阅读时长 4 分钟读完

JavaScript 中如何使用 ES10 的 Promise.allSettled() 方法

ES10(也称作 ECMAScript 2019)是 JavaScript 的最新标准,在其中新引入了一个非常实用的方法——Promise.allSettled()。相较于 Promise.all() 方法,Promise.allSettled() 允许我们在返回所有 Promise 状态时获取每个 Promise 的状态和结果。在使用 Promise.all() 方法时,如果任一 Promise 被拒绝,整个 Promise.all() 方法就会被拒绝。但在使用 Promise.allSettled() 方法时,即使任何一个 Promise 被拒绝,Promise.allSettled() 仍会返回一个对象数组,允许我们检查每个 Promise 的状态和结果。在本篇文章中,我们将深入探讨一下如何使用 Promise.allSettled() 方法,以及该方法如何帮助我们更有效地管理异步代码。

一般而言,当我们需要处理多个 Promise 时,可以使用 Promise.all() 方法来等待所有 Promise 的完成。示例代码如下所示:

但是,如果任意一个 Promise 被拒绝(rejected),整个 Promise.all() 方法就会被拒绝(rejected),导致我们难以处理异步代码。为了帮助我们处理这个问题,ES10 引入了 Promise.allSettled() 方法。在使用 Promise.allSettled() 方法时,返回的对象数组中会包含每个 Promise 的状态和结果,而不管它是否被拒绝。示例代码如下所示:

执行上面的代码,Promise.allSettled() 会返回一个包含每个 Promise 状态和结果的对象数组,无论这些 Promise 是否被拒绝。对象数组中的每个元素都包含以下两个属性:

  • status:表示 Promise 的状态,可能的值为 fulfilled(已成功)、rejected(已拒绝)或未知字符串。
  • value:表示 Promise 的结果(fulfilled)或原因(rejected)。

因为每个 Promise 状态和结果都包含在返回的对象数组中,所以我们可以很容易地检查每个 Promise 的状态和结果。

下面是一个使用 Promise.allSettled() 方法的示例。我们模拟三个异步请求,并使用 Promise.allSettled() 方法等待这些请求的完成。

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

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

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

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

上面的代码中,我们通过 Promise.allSettled() 等待三个异步请求的结果,然后对每个请求进行分类,并输出结果。如果有请求失败,我们还可以检查失败原因。

总结起来,Promise.allSettled() 方法是 JavaScript 异步编程中一个非常实用的方法。它让我们能够更有效地管理异步代码,而不需要担心任何一个 Promise 被拒绝导致整个 Promise 被拒绝。同时,Promise.allSettled() 方法返回的对象数组也提供了方便的方式来检查每个 Promise 的状态和结果。

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

纠错
反馈