ES11 中如何处理依赖不同的异步绑定和减少复杂性

阅读时长 5 分钟读完

ES11(也称作 ES2020)是 JavaScript 语言最新的一个版本,其中增加了一些新的特性和语法。在这篇文章中,我们将会讨论一下其中一个新特性:Promise.allSettled 方法。这个方法有助于我们处理依赖不同的异步绑定,同时也减少了代码的复杂性。

问题的背景

目前,在处理多个异步请求时,我们通常会使用 Promise.all 方法。这个方法会返回一个 Promise 对象,只有当所有的异步请求都成功时,这个 Promise 对象才会被 resolved。如果其中有一个请求失败了,整个 Promise.all 方法就会失败。这使得我们可以像下面这样来处理异步请求的结果:

但是,如果其中一个异步请求失败了,整个流程就会停止。有时候我们希望不管请求成功或失败,都能处理每一个异步请求的结果。为了达成这个目的,我们需要手动地遍历每一个请求的 Promise 对象,这样做就显得比较麻烦并且容易出错。

Promise.allSettled 方法

新加入的 Promise.allSettled 方法解决了上述问题。它与 Promise.all 方法类似,都接收一个 Promise 对象数组作为参数,但是它不会在所有的异步请求都成功后才返回一个 resolved 的 Promise 对象。相反,它会在所有请求都 “settled”(也就是 resolved 或 rejected)之后返回一个新的 Promise 对象,并且在这个 Promise 对象 resolve 时,提供一个包含每个 Promise 对象的状态值(fulfilled 或 rejected)和结果(即应该在 fulfilled 时提供的数据,或在 rejected 时提供的错误信息)的数组。

如果我们使用 Promise.allSettled 方法,即使有一个异步请求失败了,也仍然可以处理所有的请求结果。

示例代码

接下来我们来看一个完整的代码示例,使用 Promise.allSettled 方法处理依赖不同的异步请求的结果:

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

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

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

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

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

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

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

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

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

在上述示例代码中,我们使用了 Promise.allSettled 方法来并发地获取三个不同的资源。当所有的 Promise 对象都 settled 时,我们使用 if 语句来检查每一个 Promise 对象的状态,如果是 fulfilled,我们就调用相应的处理函数,否则就调用相应的错误处理函数。 这种写法不仅可以极大地简化代码,还可以使处理不同类型的异步请求更加容易。

结论

在这篇文章中,我们简要介绍了 ES11 中新增的 Promise.allSettled 方法,并讨论了它的工作原理。我们看到了如何使用这个方法来处理依赖不同的异步绑定,同时减少手动遍历每一个请求的 Promise 对象所带来的复杂性。通过上面的示例,我们也可以看到这种写法在处理不同类型的异步请求上非常有用。

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

纠错
反馈