你不知道的 ES11:Promise.allSettled - 处理多个异步任务的结果

阅读时长 4 分钟读完

ES11(也称为 ES2020)是 JavaScript 的最新版本之一,它增加了一些新的功能和语法,其中一个新功能是 Promise.allSettled。本文将介绍 Promise.allSettled 的作用以及如何使用它来处理多个异步任务的结果。

Promise.allSettled

Promise.allSettled 方法接收一个 Promise 数组作为参数,并返回一个新的 Promise,该 Promise 将在所有传入的 Promise 都已经 settled(已解决)后被 resolved(已解决)。settled 是指 Promise 被 fulfilled(已完成)或 rejected(已拒绝)。

Promise.allSettled 方法返回的 Promise 解决后,它将包含一个由每个传入 Promise 的状态组成的数组,每个状态都包含以下两个属性:

  • status:字符串,表示 Promise 的状态。可能的值为 "fulfilled"(已完成)或 "rejected"(已拒绝)。
  • valuereason:取决于 Promise 的状态。如果状态为 "fulfilled",则为 Promise 的解决值;如果状态为 "rejected",则为 Promise 的拒绝原因。

示例代码

下面是一个使用 Promise.allSettled 方法的示例代码:

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

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

在这个例子中,我们创建了一个包含三个 Promise 的数组。第一个 Promise 是一个已解决的 Promise,它的解决值为 1;第二个 Promise 是一个已拒绝的 Promise,它的拒绝原因为一个 Error 对象;第三个 Promise 也是一个已解决的 Promise,它的解决值为字符串 "hello"。

我们将这个 Promise 数组传递给 Promise.allSettled 方法,并在其返回的 Promise 上使用 then 方法来处理结果。在 then 方法中,我们遍历返回的结果数组,并打印每个 Promise 的状态和值或原因。

输出如下:

指导意义

Promise.allSettled 方法非常有用,因为它允许我们同时处理多个异步任务的结果,而不必担心其中一个任务失败而导致整个 Promise 链失败。它还可以让我们更轻松地处理异步任务的结果,而不必使用 Promise.all 方法,该方法在遇到拒绝的 Promise 时会立即中止。

在实际开发中,当我们需要从多个异步任务中获取结果时,可以使用 Promise.allSettled 方法。例如,当我们需要从多个 API 端点获取数据时,我们可以使用 Promise.allSettled 方法来处理结果,并在所有请求完成后显示数据。

结论

Promise.allSettled 是 ES11 中的新功能,它可以用于处理多个异步任务的结果。该方法返回一个 Promise,该 Promise 将在所有传入的 Promise 都已经 settled 后被 resolved。在 Promise 解决后,它将包含一个由每个传入 Promise 的状态组成的数组,每个状态都包含一个 status 属性和一个 value 或 reason 属性。Promise.allSettled 方法非常有用,因为它允许我们同时处理多个异步任务的结果,并且可以更轻松地处理异步任务的结果。

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

纠错
反馈