ES6 中的 Generator 函数使用详解

阅读时长 5 分钟读完

Generator 是 ES6 引入的一种新的语言特性,它是一种能够生成多个值的函数。与普通函数不同的是,Generator 函数能够暂停自己的执行,并在需要时恢复执行。

Generator 函数的语法

Generator 函数使用 function* 声明,其中 * 表示当前函数是一个 Generator 函数。

Generator 函数内部使用 yield 语句来生成值。当代码执行到 yield 语句时,函数的执行将会被暂停,并返回一个值。

Generator 函数的执行

Generator 函数必须通过调用 next() 方法才能够执行。调用 next() 方法时,函数将会从上一次暂停的地方继续执行,并返回一个包含两个属性的对象,分别是 valuedone

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

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

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

调用 next() 方法时,可以传递一个参数,它将作为上一次 yield 语句的返回值。

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

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

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

Generator 函数与 Iterator 接口

Generator 函数实现了 Iterator 接口,因此可以使用 for...of 语句进行遍历。

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

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

应用场景

异步代码展开

Generator 函数对于处理异步代码非常有用。在传统的异步代码中,为了避免回调地狱,必须采用 Promise 或 async/await 这样的语言特性。而在 Generator 函数中,则可以通过使用 yield 语句来暂停函数执行,等待异步操作的结果。

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

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

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

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

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

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

  -------
-

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

数据流控制

由于 Generator 函数可以生成多个值,所以可以用于控制数据流的生成和消费。

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

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

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

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

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

总结

Generator 函数是一种非常有用的语言特性,它能够生成多个值,并在需要时暂停函数执行。它在处理异步代码和控制数据流等场景中非常有用。但是,由于它是一种新的语言特性,因此在使用时需要谨慎考虑,并遵循相应的最佳实践。

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

纠错
反馈