ES2020 中的 Promise.allSettled():一起看看它的使用及使用限制吧

阅读时长 4 分钟读完

在 ES2020 中,Promise.allSettled() 是一个新的方法,它可以接收多个 Promise 对象并同时等待它们全部执行完毕。与 Promise.all() 不同的是,在任何一个 Promise 对象状态变更时,Promise.allSettled() 都会继续执行并返回一个数组,其中包含所有 Promise 对象的执行结果及其执行状态。

语法

Promise.allSettled(iterable)

参数:

  • iterable:一个可迭代对象,通常是由多个 Promise 对象组成的数组;

返回值:一个数组,由多个对象组成,每个对象代表一个 Promise 对象的执行结果及其状态信息。每个对象都包含以下属性:

  • status:Promise 对象的执行状态,字符串类型,包括 "fulfilled"(已完成)和 "rejected"(已拒绝)两种状态;
  • value:Promise 对象的执行结果,如果 status 为 "fulfilled" 则为函数的返回值,否则为错误对象。

使用示例

下面是一个简单的示例,用来模拟同时加载多个图片资源的场景:

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

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

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

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

在上面的代码中,我们首先定义了一个 loadImages() 函数,它将一个由多个图片资源地址组成的数组作为参数,并通过循环创建多个 Promise 对象来加载图片资源。在每个 Promise 对象的执行结束之后,我们都会将其执行结果用一个包含 urlstatus 两个属性的对象表示,并通过 resolve() 方法传递给 Promise 对象的处理函数。

最后,我们使用 Promise.allSettled() 方法将所有的 Promise 对象进行汇总,并通过 then() 方法获取全部 Promise 对象执行的结果。

使用限制

尽管 Promise.allSettled() 方法很方便,但它也存在一些使用限制:

  • Promise.allSettled() 方法是 ES2020 标准中新增的方法,不兼容低版本浏览器。在使用前,需要先检查当前环境是否支持该方法,如果不支持可以使用第三方 Promise 处理库来代替;
  • Promise.allSettled() 方法返回的结果数组中,无法区分那些 Promise 对象未能顺利执行,不能像 Promise.all() 中那样通过 Promise 异常捕获来进行错误处理;
  • 在处理大量 Promise 对象时,Promise.allSettled() 的性能比 Promise.all() 差,因为它需要依次遍历每个 Promise 对象,获得其执行结果和状态,并将它们放入执行结果数组中。如果 Promise 对象数量较少,则两个方法的性能差异可以忽略不计,但是当 Promise 对象数量较多时,应优先考虑使用 Promise.all() 方法。

总结

ES2020 中新增的 Promise.allSettled() 方法,是一个处理多个 Promise 对象的方便工具,它不仅可以快速获取所有 Promise 对象的执行结果和状态,还可以将它们统一封装成对象数组,并直接传递给下一个 Promise 处理函数进行下一步操作。

在使用 Promise.allSettled() 方法时,需要注意该方法的使用限制,以便在实际开发中更好地发挥它的作用。

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

纠错
反馈