ES9 中新增的 async 迭代器和生成器

在 ECMAScript 2018 (ES9) 中,除了已经成为核心的异步操作工具 Promise,还新增了一些强大的异步操作工具:Async FunctionAsync Generator FunctionAsync Iterator。尤其是在处理高级异步操作时,这些工具简化了代码结构,让代码更易读,易维护。

Async Generator Function

ES9 中新增了 Async Generator Function,它是 generator function 在 async 函数中的扩展形式。Async Generator Function 内部每一次 yield 都会成为一个 promise 对象返回,支持 for-await-of 或者 yield*

下面是一个 Async Generator Function 的示例:

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

之后你就可以使用 for await ... of 语句来进行异步迭代操作:

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

这就相当于:

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

Async Iterator

ES9 也新增了 Async Iterator 定义来支持 for-await-of,Async Generator Object 自动成为实现 Async Iterator 的对象。Async Iterator 只要实现了 .next() 方法并且返回一个 promise,就可以被 for-await-of 语句使用。

下面是一个 Async Iterator 的示例:

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

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

这里定义了一个 asyncIterable 对象,在调用 for-await-of 语句时会自动调用这个对象的 [Symbol.asyncIterator] 方法,方法需要返回一个实现 Async Iterator 的对象。这个对象的 .next() 方法返回一个 promise,代表这个异步操作的执行结果。

结论

ES9 为我们提供了更多的异步操作的选择,为前端开发创造更加可控、简洁的代码结构。要想充分发挥这些特性的优势,需要我们对其深入了解,积极进取、不断研究。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/671c92c19babaf620fb1625d