ES11 之 Promise.allSettled():让异步编程更简单

阅读时长 5 分钟读完

在前端开发中,异步编程是非常常见的。而 Promise 是异步编程的一种方式,它可以简化异步编程的过程,使代码更加可读、可维护。

ES11(也称为 ECMAScript 2020)新加入了 Promise.allSettled(),该方法可以让异步编程更简单。本文将介绍 Promise.allSettled() 的特性和用法,结合示例代码让读者更好地理解和掌握。

Promise.allSettled() 的特性

Promise.allSettled() 接收一个 Promise 数组,当所有 Promise 都 settled(该 Promise 的状态发生改变,即 fulfilled 或 rejected)时,返回一个新的 Promise,该 Promise 的状态为 fulfilled,其值是一个数组,每项代表传入的 Promise 数组中的一个 Promise 的结果。

不同于 Promise.all() 的特性,在 Promise 数组中只要有一个 Promise 被 rejected,Promise.all() 就会直接返回一个 rejected 状态的 Promise,而 Promise.allSettled() 则会在所有 Promise settled 后返回一个 fulfilled 状态的 Promise,无论 Promise 的状态是 fulfilled 还是 rejected,它们的结果都会包含在返回的数组中。返回的数组中的每个对象都有以下两种属性之一:

  1. status:代表 Promise 的状态,如果 Promise fulfilled,则为 'fulfilled';如果 Promise rejected,则为 'rejected'
  2. valuereason:分别代表 Promise fulfilled 和 Promise rejected 时的值。

Promise.allSettled() 的用法

基础用法

Promise.allSettled() 用法很简单,只需传入一个 Promise 数组即可。例如:

输出的结果为:

结合其他异步编程方式使用

Promise.allSettled() 和 async/await、Promise.race() 等异步编程方式结合使用,可以进一步简化异步编程的过程。

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

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

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

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

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

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

在上面的代码中,我们结合了 async/await 和 Promise.allSettled(),获取了三个 JSON 数据文件的结果。最后根据返回结果的状态,分别打印出 fulfilled 的结果和 rejected 的原因。

总结

Promise.allSettled() 是一个非常实用和有用的方法,它可以让开发者更加方便地处理异步编程时返回的结果,无论 Promise 的状态是 fulfilled 还是 rejected,其结果都会被包含在返回的数组中,让代码更加易于维护。

使用 Promise.allSettled() 和其他异步编程方式结合使用,能够让我们的异步编程过程更加简单、可读性更强。希望本文能够为读者提供帮助,让大家更好地掌握异步编程的技巧。

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

纠错
反馈