ECMAScript 2018 中的异步迭代器:Asynchronous Generators 和 Async Iterators

阅读时长 5 分钟读完

在 ECMAScript 2018 中,新增了异步迭代器的概念,这使得在处理异步数据流时,可以更加方便和灵活。

异步迭代器的概念

异步迭代器是一种特殊的迭代器,它能够处理异步数据流。它的工作原理与普通迭代器类似,但是它的 next() 方法返回一个 Promise 对象,这个 Promise 对象会在异步操作完成后被 resolve,resolve 的值为一个包含两个属性的对象:valuedone

其中,value 表示迭代器返回的值,done 表示迭代器是否已经完成。

异步迭代器的定义方式如下:

其中,async function* 表示这是一个异步迭代器,yield 表示返回一个值,这个值可以是一个 Promise 对象或者普通值。

Asynchronous Generators

Asynchronous Generators 是异步迭代器的一种实现方式。它可以方便地处理异步数据流,并且可以使用 for-await-of 循环来遍历异步数据流。

具体来说,Asynchronous Generators 的 next() 方法返回一个 Promise 对象,这个 Promise 对象会在异步操作完成后被 resolve,resolve 的值为一个包含两个属性的对象:valuedonevalue 可以是一个 Promise 对象或者普通值。

Asynchronous Generators 的定义方式如下:

其中,async function* 表示这是一个异步迭代器,yield 表示返回一个值,这个值可以是一个 Promise 对象或者普通值。

使用 Asynchronous Generators 来处理异步数据流的示例代码如下:

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

--- ----- ------ ----- -- ------------- -
  -------------------
-
展开代码

上面的代码中,fetchPages() 是一个 Asynchronous Generator,它会从远程服务器获取分页数据。for await-of 循环会遍历这个异步数据流,每次迭代都会返回一个包含多个分页数据的数组。

Async Iterators

Async Iterators 是异步迭代器的另一种实现方式。它可以方便地处理异步数据流,并且可以使用 for-await-of 循环来遍历异步数据流。

具体来说,Async Iterators 的 next() 方法返回一个 Promise 对象,这个 Promise 对象会在异步操作完成后被 resolve,resolve 的值为一个包含两个属性的对象:valuedonevalue 可以是一个 Promise 对象或者普通值。

Async Iterators 的定义方式如下:

其中,async * 表示这是一个异步迭代器,yield 表示返回一个值,这个值可以是一个 Promise 对象或者普通值。[Symbol.asyncIterator]() 方法返回一个异步迭代器对象。

使用 Async Iterators 来处理异步数据流的示例代码如下:

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

--- ----- ------ ----- -- ---------------- -
  -------------------
-
展开代码

上面的代码中,myAsyncIterable 是一个 Async Iterator,它会从远程服务器获取分页数据。for await-of 循环会遍历这个异步数据流,每次迭代都会返回一个包含多个分页数据的数组。

总结

异步迭代器是 ECMAScript 2018 中的一个重要特性,它使得处理异步数据流变得更加方便和灵活。在实际应用中,我们可以使用 Asynchronous Generators 或 Async Iterators 来处理异步数据流,以便更好地满足业务需求。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/661a509cd10417a222b56ec1

纠错
反馈

纠错反馈

程序员教程

精选优质教程,助你快速提升技术实力

程序员面试题库

海量优质面试题,助你轻松应对技术面试