重学 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】。文章转载请联系作者。
评论