ES11 (2020) 中的 Promise.allSettled:如何更好地处理异步任务结果?

阅读时长 3 分钟读完

在前端开发中,我们经常需要处理异步任务,例如向服务器发起 Ajax 请求获取数据。在这种情况下,我们可能需要同时发起多个请求,需要判断这些请求是否都已经完成。

ES6 中引入了 Promise 对象来解决这个问题。在这个语法糖中,我们可以使用 Promise.all() 方法来等待所有的请求完成,并返回一个包含所有请求结果的数组。

但是 Promise.all() 方法有个缺陷,在任何一个 Promise 对象被 reject 后,Promise.all() 立即执行 reject。这种情况下我们很难判断哪些 Promise 已经成功返回,哪些 Promise 返回了错误。因此,ES11 中引入了 Promise.allSettled() 新方法,可以更好地处理异步任务结果。

Promise.allSettled() 方法

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

其中,iterable 是一个可迭代对象,它包含了多个 Promise 对象。返回值是一个 Promise 对象,它的 value 是一个包含每个 Promise 对象的状态(fulfilled 或者 rejected)和结果(value 或者 reason)的对象数组。

实际应用

下面,我们通过一个例子来说明 Promise.allSettled() 的使用。

我们假设有三个异步请求 getData1()getData2()getData3(),它们的返回结果有可能成功也有可能失败。我们使用 Promise.allSettled() 去并行并等待所有请求的数据返回。代码如下:

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

代码中,我们将所有的 Promise 对象放入数组中并传给 Promise.allSettled() 方法,等待所有请求返回结果。然后我们使用 forEach 循环遍历每个 Promise 对象的状态和结果,根据状态和结果分别处理操作。

总结

Promise.allSettled() 方法是一个非常有用的工具,它可以让我们更好地处理异步任务的结果。使用它,我们可以轻松地等待多个异步任务同时完成,并在所有任务完成后统一处理它们的状态和结果。

总之,当你需要处理多个异步任务的结果时,Promise.allSettled() 方法是一个非常好的选择。

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

纠错
反馈