ES9 新特性:异步生成器 Generator 和 Async Generator

阅读时长 5 分钟读完

在 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

纠错
反馈