ECMAScript 2020 (ECMAScript 11) 新特性之 Promise.allSettled()

阅读时长 4 分钟读完

在 ECMAScript 2020 中,Promise.allSettled() 是一个新的 Promise 方法,它返回一个 Promise,该 Promise 在所有给定的 Promise 已经完成或拒绝并且所有 Promise 的结果都已经处理后才会被解决。与 Promise.all() 不同的是,Promise.allSettled() 不会在任何 Promise 被拒绝时立即拒绝,而是在所有 Promise 完成后才会解决。

Promise.all() 和 Promise.allSettled() 的区别

Promise.all() 和 Promise.allSettled() 都可以用来等待多个 Promise 完成,但它们有一些区别:

  1. Promise.all() 会在任何一个 Promise 被拒绝时立即拒绝,而 Promise.allSettled() 会在所有 Promise 完成后才会解决。
  2. Promise.all() 返回一个 Promise,该 Promise 解决后返回所有 Promise 的结果数组。如果有任何一个 Promise 被拒绝,该 Promise 将被拒绝并返回拒绝的原因。而 Promise.allSettled() 返回一个 Promise,该 Promise 解决后返回一个对象数组,该数组包含每个 Promise 的结果。如果 Promise 被解决,结果对象将包含一个 value 属性,如果 Promise 被拒绝,结果对象将包含一个 reason 属性。

Promise.allSettled() 的语法

Promise.allSettled() 方法的语法如下:

其中,promises 参数是一个 Promise 对象数组,用于等待完成。

Promise.allSettled() 的返回值

Promise.allSettled() 方法返回一个 Promise 对象,该对象在所有 Promise 完成后被解决。解决时,它将返回一个对象数组,该数组包含每个 Promise 的结果。如果 Promise 被解决,结果对象将包含一个 value 属性,如果 Promise 被拒绝,结果对象将包含一个 reason 属性。

以下是一个使用 Promise.allSettled() 的示例代码:

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

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

上面的示例代码中,我们创建了一个包含三个 Promise 的数组。第一个和第三个 Promise 都是解决的,而第二个 Promise 是被拒绝的。我们使用 Promise.allSettled() 方法等待所有 Promise 完成,并在解决后遍历结果数组,打印每个 Promise 的结果。

Promise.allSettled() 的学习意义

Promise.allSettled() 方法提供了一种更加灵活的方式来等待多个 Promise 完成。它不会在任何一个 Promise 被拒绝时立即拒绝,而是在所有 Promise 完成后才会解决,这使得代码更加健壮和可靠。此外,Promise.allSettled() 还可以让我们更方便地处理多个 Promise 的结果,而不必担心其中任何一个 Promise 是否被拒绝。

总结

Promise.allSettled() 是 ECMAScript 2020 中新增的一个 Promise 方法,用于等待多个 Promise 完成。与 Promise.all() 不同的是,Promise.allSettled() 不会在任何一个 Promise 被拒绝时立即拒绝,而是在所有 Promise 完成后才会解决。它返回一个对象数组,该数组包含每个 Promise 的结果。如果 Promise 被解决,结果对象将包含一个 value 属性,如果 Promise 被拒绝,结果对象将包含一个 reason 属性。Promise.allSettled() 方法提供了一种更加灵活的方式来等待多个 Promise 完成,使得代码更加健壮和可靠。

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

纠错
反馈