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