重学 JS | 异步编程 Generator()

Generator()函数是 ES6 的另一种异步编程解决方案。从语法上可以把它理解为一种状态机,内部维护了多个状态,函数执行后会返回一个拥有Iterator接口的对象,通过这个对象可以依次获取Generator()函数内部的每一个状态。
简单用法如下:
从例子可以看出,Generator()函数的特性:
function关键字和函数名之间有一个星号("*")内部使用
yield关键字来定义内部不同的状态Generator()函数不是构造函数,默认情况下不能使用new关键字,否则会报错,且内部的 this 也是无效的。Generator()函数执行后,函数体并没有直接执行,而是返回一个拥有Iterator接口的对象调用
next()函数才执行Generator()函数的函数体,遇到yield关键字暂停,当然若遇到return语句,则整个函数执行结束,后面的 yield 语句也都失效。next()函数返回的是一个含有value和done属性的对象,value表示的是yield表达式执行的结果所有
yield语句执行完毕时,函数会执行到末尾,如果有return语句,会将return语句的表达式作为value返回,否则返回undefined,同时done为true,表示遍历结束。
再来看个例子:
Generator()函数返回的是一个拥有Iterator接口的对象,因此可以用for...of进行遍历,遍历的结果是yield表达式的返回值。
如何让对象类型的值遍历支持for...of呢?通过Generator()函数,看例子:
最后,看看Generator()函数嵌套的问题,可以采用yield* 表达式以支持嵌套使用,看例子:
至此,我们学习了 ES6 中异步编程的另一个解决方案:Generator()函数。另一个异步编程解决方案Promise点文章链接查看:
版权声明: 本文为 InfoQ 作者【梁龙先森】的原创文章。
原文链接:【http://xie.infoq.cn/article/1b406d458fded829aa0097faf】。文章转载请联系作者。











评论