ES9 的 Asynchronous Iteration 和 Parallelism

阅读时长 4 分钟读完

ES9 在异步迭代和并行计算方面进行了大幅度的改进,提供了更好的并行性和处理异步事件序列的方式。本篇文章将详细介绍这些改进,包括使用场景、实现方法以及示例代码。

异步迭代

异步迭代是指在处理异步数据序列时进行的一种迭代方式。在 ES9 中提供了 for of 的异步版本,即 for await of,可以处理异步序列的项。

for await of

for await of 语法和 for of 一样,不同的是,它可以用于异步迭代部分。比如,可以使用它来遍历一个异步生成器函数的结果。

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

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

异步迭代器

异步迭代器可以通过实现 Symbol.asyncIterator 方法来实现。需要返回一个对象,该对象必须包含一个 next 方法,以及一个 return 方法(用于停止迭代),分别返回 Promise。在下面的示例中,我们实现了一个异步迭代器,用于异步遍历一个数组的元素。

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

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

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

并行计算

在 ES9 中,可以使用 Promise.allSettled 并且配合异步迭代,来进行并行计算,进一步提高程序的性能。

Promise.allSettled

Promise.allSettled 方法返回一个 Promise 对象,该对象在多个 Promise 都已被处理后才会被处理。这个方法在所有 Promise 都完成后返回结果,不像 Promise.all 方法在其中任意一个 Promise 被拒绝时就会被拒绝。

在下面的示例中,我们使用了 Promise.allSettled 方法和异步迭代器,来异步处理多个 URL 请求,并且打印它们的结果。

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

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

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

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

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

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

总结

ES9 引入的异步迭代和并行计算提供了一种更好的处理异步事件序列的方式。在处理异步数据序列时,可以使用 for await of 来进行异步迭代。在并行计算方面,可以使用 Promise.allSettled 和异步迭代器,来提高程序运行的效率。

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

纠错
反馈