在 ES9 中,引入了两个重要的异步特性:异步生成器(generator)和异步迭代器(iterator)。
异步生成器 Generator
Generator 是 ES6 中引入的一种用于表示迭代器的函数类型。在 ES9 中,可以将 Generator 转化为异步可迭代的数据流,利用 Async Generator 实现异步操作。
生成器和迭代器
生成器是一个函数,用来生成一个可以多次迭代的序列。
-- -------------------- ---- ------- --------- ----------- - --- - - -- ----- -- - -- - ----- ---- - - ----- -------- - ------------ ----------------------------- -- - ------ -- ----- ----- - ----------------------------- -- - ------ -- ----- ----- - ----------------------------- -- - ------ -- ----- ----- - ----------------------------- -- - ------ ---------- ----- ---- -
上面代码中,generator 函数是一个生成器,用 yield 语句返回一个值,每个 Iterator.next() 调用会从 generator 函数中获取下一个值。
异步生成器
在 ES9 中,可以通过 Generator 函数的函数名前加 async 关键字,表示这是一个异步生成器(generator)。异步生成器可以带有异步的 yield 语句,在等待异步操作的同时,允许程序运行非阻塞的状态。
异步生成器可以通过 next() 非阻塞式获取下一个值,以实现异步操作。
-- -------------------- ---- ------- ----- --------- ---------------- - --- - - -- ----- -- - -- - ----- --- --------------- -- ------------------- ------- ----- ---- - - ----- ------------- - ----------------- ------ -------- -- - ----------------- ---------------------- ----------------- ---------------------- ----------------- ---------------------- ----------------- ---------------------- -----
异步迭代器
当然,在 ES9 中,异步生成器最重要的应用就是异步迭代器(async iterator)。
异步迭代器具备 Symbol.asyncIterator 方法,表示在遍历时可获取一个异步迭代器。在异步操作后,使用 await 语句获取异步操作结果。
-- -------------------- ---- ------- ----- --------- ---------------- - --- - - -- ----- -- - -- - ----- --- --------------- -- ------------------- ------- ----- ---- - - ------ ---------- - --- ----- ------ ----- -- ----------------- - ------------------- - -----
异步生成器和异步迭代器使我们能够异步生成和处理数据流。异步生成器和迭代器的结合可以非常方便地处理异步任务,例如 HTTP 请求、数据库查询等。异步生成器和迭代器的编程模型已经被 ES6 异步操作基础所采纳,现在,异步生成器和迭代器的诞生将为异步编程提供更强大的工具。
Async Generator
Async Generator 可以创建一个异步生成器对象。与 Generator 类似,可以通过 for-await-of 语法进行访问。
-- -------------------- ---- ------- ----- --------- ---------------- - --- ---- - - -- - - ----- ---- - ----- --- --------------- -- ------------------- ------- ----- -- - - -------- -- - --- ----- ---- - -- -------------- - --------------- - -----
Async Generator 提供了非常方便的语法,用于异步处理数据流,其可以与常规的异步任务一起使用,例如 HTTP 请求和数据库查询等。
总结
ES9 的两个特性:异步生成器和异步迭代器,可以更好地支持异步编程,为异步操作提供更强大的工具。与 Async/await 所提供的便利性相辅相成,能使编程者更加简单、灵活地编写异步代码。在实际应用中,异步生成器和异步迭代器可以非常方便地处理数据流、HTTP 请求、数据库查询等异步任务。
附示例代码:https://codesandbox.io/s/async-generator-sample-0svpi
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6486c4d748841e989454bfcf