聊一聊 ES2017 的 async generator 以及生成器 yield

阅读时长 4 分钟读完

随着 JavaScript 的不断发展,ES2017 引入了 asyncawait 两个关键字,使得异步编程变得更加简单易懂。同时,ES2017 还引入了 async generatorgenerator yield,进一步提升了 JavaScript 异步编程的能力。

async generator

async generator 是一种特殊的生成器,它可以异步产生一系列值。与普通生成器不同的是,async generator 可以在执行时暂停,并在异步操作完成后继续执行。这使得我们可以在异步操作完成之前,暂停生成器的执行,以等待异步操作完成后再继续执行。下面是一个简单的示例:

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

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

在上述示例中,我们定义了一个 async generator,它会异步产生数字 1、2 和 3。我们使用 for await...of 循环来迭代 async generator,并在每次迭代时输出产生的数字。

需要注意的是,在 async generator 中使用 await 关键字时,需要将其放在 yield 关键字的后面,以确保异步操作完成后再继续执行生成器。

generator yield

generator yield 是普通生成器的关键字,它可以在生成器中产生一系列值。与 async generator 不同的是,generator yield 不支持异步操作,只能在同步环境下使用。下面是一个简单的示例:

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

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

在上述示例中,我们定义了一个普通生成器,它会产生数字 1、2 和 3。我们使用 for...of 循环来迭代生成器,并在每次迭代时输出产生的数字。

总结

async generatorgenerator yield 是 JavaScript 异步编程的两个重要关键字。它们可以帮助我们更加方便地处理异步操作,提高代码的可读性和可维护性。需要注意的是,在使用 async generator 时需要使用 await 关键字来等待异步操作完成,而在使用 generator yield 时只能在同步环境下使用。

希望本文能够帮助大家更好地理解 async generatorgenerator yield,并在实际项目中得到应用。

示例代码

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

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

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

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

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

纠错
反馈