JavaScript 在 ES2018(ES9) 中新增了一个 for-await-of 循环语法,该语法用于遍历异步迭代器中的内容。本文将探讨 for-await-of 循环的含义以及在 ES9 中的实现,并提供一些示例代码供读者参考。
for-await-of 循环的含义
for-await-of 循环最基本的含义是,在异步迭代器(即返回 promise 的迭代器)中循环,等待每个迭代值(resolve 或 reject) 返回。这表示,每当迭代器返回一个 promise,在该 promise fulfilled 之前,循环都将阻塞,并等待后续的值返回。
为了更清晰地说明 for-await-of 循环的含义,我们将通过以下示例解释:
-- -------------------- ---- ------- ----- --------- ---------------- - ----- -- ----- -- ----- -- -- ----- -------- ------ - ----- --- - ----------------- --- ----- ------ ----- -- ---- - ------------------- - - -------
在上面的代码中,我们创建了一个异步迭代器 asyncGenerator 并在 test 函数内使用 for-await-of 循环进行循环迭代,输出结果为 1、2、3。此示例演示了 for-await-of 循环在异步迭代器中的使用方法。
for-await-of 循环在 ES9 中的实现
在 ES9 中,for-await-of 循环使用了新的 Symbol.asyncIterator 语法。Symbol.asyncIterator 提供了一种标准接口,以促进异步迭代器开发及其在 for-await-of 循环中的使用。
以下是对 Symbol.asyncIterator 接口的解释:
Symbol.asyncIterator
Symbol.asyncIterator 属性指定一个可以被异步枚举的对象的默认迭代器。 与for-await-of循环结合,将在循环对象上调用该属性。
在实际使用中,for-await-of 循环通过迭代器和 promises 实现,它在每次循环期间以及每当一个 promise 操作完成后阻塞。
在下面的代码片段中,我们将使用 for-await-of 循环并演示其实现方式:
-- -------------------- ---- ------- ------ -- -- - ----- ----------------- - ------------------------- ------ ----- ------ - ---------------------------------------- ----- ------ - ------------------- ----- ------ - ----- - ----- ----- - - ----- -------------- -- ------ ------ ------------------- - -----
在上面的代码片段中,我们创建了一个异步生成器 createAsyncIterable 和一个异步迭代器 createReadableStream,使用 for-await-of 循环并循环迭代异步迭代器中的内容。
总结
for-await-of 循环在 ES9 中为开发人员提供了一个更为优秀和灵活的异步编程模式,可以轻松地遍历异步迭代器并等待每个 promise 操作完成。为了充分利用 for-await-of 循环,我们建议进一步学习 Symbol.asyncIterator 和异步迭代器,以及使用最佳实践。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/651e685695b1f8cacd60ecf8