ECMAScript 2018:异步迭代器与可让人提前退出的迭代器

阅读时长 4 分钟读完

ECMAScript 2018(ES2018)是 JavaScript 的最新版本,其中包含了很多新的语言特性和增强功能,其中特别引人注目的是异步迭代器和可让人提前退出的迭代器。本文将介绍这两个新特性的详细内容,并通过示例代码来演示如何实现和使用它们。

异步迭代器

在 ES2015 中,引入了使用 for...of 循环遍历序列的语法。这通常称为迭代器,因为它使用一个可迭代对象,该对象实现了 Symbol.iterator 方法,该方法返回一个迭代器对象。ES2018 引入了异步迭代器,以便异步地遍历可迭代的序列。

异步迭代器是实现了 Symbol.asyncIterator 方法的可迭代对象,该方法返回一个异步迭代器对象。异步迭代器对象类似于常规迭代器对象,但它的 next() 方法返回一个带有异步值的 Promise,而不是直接返回一个值。

示例代码:

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

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

-------

在上面的示例代码中,我们定义了一个名为 AsyncRange 的类,实现了 Symbol.asyncIterator 方法,并在该方法中返回了一个异步迭代器对象。我们还定义了一个名为 main 的异步函数,用于遍历 AsyncRange 的实例,并打印出值。

可让人提前退出的迭代器

在通常的迭代器中,我们仅能通过循环将整个序列遍历完毕。ES2018 引入了一种可以让我们提前退出的迭代器。这样我们可以在需要时手动地终止迭代器的执行。

解释一下它是如何工作的。可提前退出的迭代器在迭代完成之前将使用 return() 函数来关闭迭代器。这在使用内部迭代器以遍历文件或网络事件时非常有用。当所有数据都读取和处理完毕时,我们希望停止迭代,而不是等待整个序列完成。

示例代码:

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

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

在上面的示例代码中,我们定义了一个名为 range 的生成器函数,内部使用一个 for 循环。它还使用了一个带有参数的 yield 语句,通过传入一个参数来修改当前索引。我们还创建了一个迭代器实例,并在该实例上多次调用 next() 方法来迭代值,其中第二个方法调用传入了一个参数3,它将跳过 1 和 2,并从3开始继续迭代序列。

结论

ES2018 中引入的异步迭代器和可提前退出的迭代器是 JavaScript 中非常强大和实用的概念,并且能够大大简化异步操作和迭代算法的实现。希望今后可以看到更多开发者使用这些特性来改进他们的代码。

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

纠错
反馈