Promise.allSettled():ES9 的新功能

阅读时长 3 分钟读完

Promise.allSettled():ES9 的新功能

Promise.allSettled() 是 ES9 的一个新功能。它类似于 Promise.all(),但与 Promise.all() 不同,它会等到所有 Promise 都已经 settled (不管是 resolved 还是 rejected)才返回结果。Promise.all() 只要有任何一个 Promise 被 rejected,就直接 reject 了。

使用 Promise.allSettled() 可以更加方便地对多个 Promise 进行处理,特别是当我们需要等待多个异步操作完成,并记录每一个异步操作的状态时,Promise.allSettled() 会非常有用。

使用方法

Promise.allSettled() 接受一个 Promise 数组作为参数,会返回一个新的 Promise 对象,该对象在所有 Promise 都已 settled 之后将完成:

results 数组包含的信息如下:

  • { status: "fulfilled", value: result } 表示一个 Promise 已经 resolved,并返回了 result。
  • { status: "rejected", reason: error } 表示一个 Promise 已经 rejected,并抛出了 error。

示例代码

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

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

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

该示例代码中,promises 数组包含了三个 Promise,其中第二个 Promise 是一个 rejected 状态的 Promise。使用 Promise.allSettled(),我们可以等待所有 Promise settled,不管它们是 resolved 还是 rejected,并分别记录每一个 Promise 的状态。

指导意义

Promise.allSettled() 可以提高代码的可读性,并避免因某个 Promise rejected 而导致整个异步操作失败。它可以用于维护多个异步操作的状态,并在所有异步操作完成之后做出相应的处理。

值得注意的是,Promise.allSettled() 是 ES9 的新功能,目前并不是所有的浏览器都支持它。如果需要在不支持该功能的浏览器上使用它,可以使用 Polyfill 来实现。

总结

在实际开发中,我们经常需要对多个异步操作进行处理,Promise.allSettled() 可以方便地将它们的状态记录下来,并在异步操作全部完成之后做出相应的处理。实际使用中,需要注意该功能的兼容性,并在需要的情况下使用 Polyfill 来实现。

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

纠错
反馈