Javascript异步总结


2017-09-12更新


Generator函数

从语法上看,可以把它理解成状态机,封装了多种内部状态。
执行Generator函数会返回一个遍历器对象,代表Generator函数的内部指针。也就是说Generator除了是状态机还是一个遍历器对象生成器。返回遍历器对象,可以依次遍历Generator函数内部的每一个状态。

特征

  1. function和函数名之间有*号;
  2. 函数体内部用yield语句定义不同的内部状态。

调用

和普通函数调用一样。但是函数并不执行,必须调用next方法,使得指针移向下一个状态,直到下一个yield语句或return语句。Generator函数是分段执行的,yield语句是暂停执行的标记,next方法会恢复执行。
next方法返回对象为{value: value; done: boolean},value为yield语句的值,即内部状态的值,done属性表示遍历是否结束。
yield语句不能用在普通函中,否则会报错。
yield语句本身没有返回值,或者说为undefinednext方法可以带一个参数,这个参数会被当作上一条yield语句的返回值。但是引擎忽略next方法时的参数,只有第二次使用next方法带参数才是有效的。从语义上讲,第一次next方法用来启动遍历器对象。
for……of自动遍历Generator函数,无需使用next方法。

方法

Generator.prototype.return() 返回给定的值,并终结Generator函数的遍历

yield* 方法

在一个Generator函数中调用另一个Generator函数,默认是没有效果的。
yield*语句可以用来在一个Generator函数中调用另一个Generator函数