并行执行 Promise with ES12 的 parallel 和 allSettled 方法

阅读时长 6 分钟读完

随着前端应用程序的日益复杂和交互性的提高,异步操作在前端开发中变得越来越常见。在处理异步操作时,Promise 是一种非常重要的工具,它可以使异步操作变得更简单,更可靠,并且可以更好地管理代码。

然而,在某些情况下,我们可能需要同时执行多个 Promise 操作,以便更快地完成任务。在这种情况下,我们可以使用 ES12 中新增的 parallel 和 allSettled 方法,并行地执行 Promise 操作。这两种方法都使用 Promise.all 方法的扩展版本来执行。让我们一起来深入了解并行执行 Promise 操作的这两种方法。

parallel 方法

parallel 方法可以同时执行多个 Promise 操作,并且只有当所有 Promise 操作都成功时,它才会返回成功的结果。如果其中一个 Promise 操作失败,它将立即返回失败的结果。它的语法如下:

其中,promises 参数是一个包含多个 Promise 操作的数组,results 参数是成功的 Promise 操作的结果,error 参数是第一个失败的 Promise 操作的 reject 值。

现在让我们看一个例子,假设我们需要同时从三个不同的 API 中获取一些数据:

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

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

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

在这个例子中,我们使用 fetch 方法和 then 方法从每个 API 中获取数据。然后,我们使用 Promise.parallel 方法来并行执行这些 Promise 操作。在这个例子中,我们假设所有的 Promise 操作都成功。如果有一个失败了,我们将使用 catch 方法捕获失败值。

allSettled 方法

allSettled 方法也可以同时执行多个 Promise 操作,但它不管其中的 Promise 操作是成功还是失败,它都会等待它们全部完成后返回它们的状态和值的数组。如果其中有一个 Promise 操作失败了,它也会在数组中包含其失败值。allSettled 方法的语法如下:

其中,promises 参数是一个包含多个 Promise 操作的数组,results 参数是一个数组,其中包含每个 Promise 操作的状态和值。

现在让我们看一个使用 allSettled 方法的例子,假设我们想同时验证多个表单字段是否有效:

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

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

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

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

在这个例子中,我们使用了三个异步函数 validateName、validateEmail 和 validatePassword,它们每个都返回一个 Promise。然后,我们使用 Promise.allSettled 方法来并行执行这三个 Promise 操作。在这个例子中,我们假设所有的 Promise 操作都成功。如果有一个失败了,我们也可以在数组中访问其失败值。

总结

在前端开发中,异步操作是不可避免的。使用 Promise 可以帮助我们更好地管理异步操作,但有时我们需要同时执行多个 Promise 操作。在这种情况下,ES12 的 parallel 和 allSettled 方法就非常有用了。这些方法可以使我们更方便地在应用程序中执行大量的异步操作,并且可以更好地管理和处理异步操作的结果。

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

纠错
反馈