如何正确使用 Promise.allSettled() 在 ECMAScript 2020 中?

阅读时长 4 分钟读完

在 ECMAScript 2020 中,Promise.allSettled() 是一种新的 Promise API,它为我们提供了一种更全面和灵活的处理 Promise 的方法。在本文中,我们将详细讲解 Promise.allSettled() 的正确使用方法,包括语法、用法和示例代码。

语法

Promise.allSettled() 的语法如下:

其中,iterable 是 Promise 实例的可迭代对象,可以是数组或类数组对象。该方法返回一个 Promise 实例,该 Promise 实例会在 iterable 中的所有 Promise 全部 settled 后 resolve,返回一个由所有 Promise settle 结果组成的数组,数组中每个元素都是一个对象,它们各自表示 iterable 中的 Promise settle 结果。对象包含两个属性,分别为:

  • status:Promise 的状态,可以是 "fulfilled""rejected"
  • valuereason:当 Promise 状态改变时所带的 resolvereject 函数的参数。

用法

假设有两个 Promise,会分别返回以下结果:

我们可以使用 Promise.allSettled() 以如下方式:

这将打印出以下结果:

从结果看来,我们可以清晰地看到两个 Promise 的 settle 结果和 reject 原因。

需要注意的是,即使同步代码中发生任何错误,Promise.allSettled()返回的数组仍将被 resolve,并且每个已 settled 的 Promise 的数据将被包含在结果数组中。比如:

这将打印出以下结果:

合理应用

Promise.allSettled() 的一个最大优点是它可以处理在一个项目中可能产生的多个请求。在使用该方法时,我们可以将需要进行处理的请求以 Promise 数组的形式放入到方法中,并对所有请求的结果进行集中处理和管理。

下面,我们举一个结合 axios 发出请求的实际的例子:

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

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

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

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

在这个例子中,我们使用 axios.get() 方法发出两个 API 服务的请求。我们使用 Promise.allSettled() 将两个请求相应的 Promise 组成一个数组,最后处理返回的结果,并在控制台上打印数据或错误信息。

总结

使用 Promise.allSettled() 可以更加灵活和精细地处理多个 Promise 实例的 settle 结果。在实际开发过程中,我们经常会使用该方法,对接口请求结果进行集中处理和管理。了解 Promise.allSettled() 的正确使用方法对开发者来说是非常重要的,它更加符合复杂项目的需求。

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

纠错
反馈