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

阅读时长 3 分钟读完

在 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

纠错
反馈