初识generator
generator
是ES6的新特性,也是一种异步编程的解决方案。generator函数通过function*()
来表示,它相当于一个状态机,在内部通过yield来标识每一个状态。generator函数的返回值是一个指向内部状态的指针,我们将它命名为指针g。
在generator函数内部,凡是遇到yield标记的语句都会被阻塞。它们的控制权完全交给指针g,当指针g执行next时,相当于恢复generator的执行,相应的,next操作会返回一个包含value和done的对象。若当前generator执行完成,也就是之后没有yield语句了,value返回undefind,done返回true,告诉next执行完成。如果后面会被阻塞,则done返回false,value则为yield后面语句的值。next可被传入值,所传入的值将作为yield的返回值。具体执行流程可见下图:
注意一种特殊情况: 当generator函数内部有return时,返回{ value: return值, done: true }
,结束generator的执行。