在 ES6 中,生成器是一种特殊的函数,它可以在函数体内部控制执行流程,并可以暂停和恢复函数的执行。生成器的迭代和异步实现是其最重要的特性之一。
生成器的基本语法
生成器函数使用 function*
声明,与普通函数不同的是,生成器函数内部可以使用 yield
关键字来暂停函数的执行,并返回一个值。
下面是一个简单的例子:
--------- ----------- - ----- -- ----- -- ----- -- - ----- --- - ------------ ------------------------ -- - ------ -- ----- ----- - ------------------------ -- - ------ -- ----- ----- - ------------------------ -- - ------ -- ----- ----- - ------------------------ -- - ------ ---------- ----- ---- -
在上面的例子中,generator()
函数定义了一个生成器,它返回一个包含 1、2、3 的迭代器。使用 gen.next()
方法可以依次获取迭代器中的值,每次调用 next()
方法时,生成器函数会从上一次 yield
关键字处继续执行,直到函数结束或者遇到下一个 yield
关键字。
生成器的迭代
生成器的迭代可以用 for...of
循环来实现。for...of
循环会自动调用迭代器的 next()
方法,直到迭代器的 done
属性为 true
。
下面是一个例子:
--------- ----------- - ----- -- ----- -- ----- -- - --- ------ ----- -- ------------ - ------------------- - -- ------- - - -
在上面的例子中,generator()
函数返回一个迭代器,for...of
循环自动调用迭代器的 next()
方法,直到迭代器的 done
属性为 true
。
生成器的异步实现
生成器的异步实现可以用 yield
关键字和 Promise
对象来实现。使用 yield
关键字可以暂停函数的执行,使用 Promise
对象可以异步执行任务并返回结果。
下面是一个简单的例子:
--------- ----------- - ----- ------- - ----- --- --------------- -- ------------- -- ----------- ------- ----- ------- - ----- --- --------------- -- ------------- -- ----------- ------- ----- ------- - ----- --- --------------- -- ------------- -- ----------- ------- ------ --------- -------- --------- - ----- --- - ------------ ----------------------------- -- - ------------------------------------ -- - ------------------------------------ -- - ------------------------------- -- - ------ --- -- --- ----- ---- - --- --- ---
在上面的例子中,generator()
函数返回一个迭代器,每次调用 next()
方法时,都会返回一个 Promise
对象。使用 then()
方法可以获取异步操作的结果,并传递给下一个 yield
关键字。
总结
生成器是 ES6 中非常强大的特性之一,可以用于迭代和异步编程。生成器函数使用 function*
声明,使用 yield
关键字来暂停函数的执行,并返回一个值。生成器的迭代可以用 for...of
循环来实现,生成器的异步实现可以用 yield
关键字和 Promise
对象来实现。学习生成器的迭代和异步实现对于前端开发人员来说是非常重要的。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65cc8d6fadd4f0e0ff605384