天天看点

ES6-Generator函数(解决异步问题)

Generator函数:一种返回迭代器的函数http://www.ruanyifeng.com/blog/2015/04/generator.html

generator函数使用:

1、分段执行,执行完一段yield语句自动暂停。

2、可以控制阶段和每个阶段的返回值

3、可以知道是否执行到结尾

4、yield关键字只能在生成器内部使用,生成器内部的函数都不可以。

注意:不能使用箭头函数来创建生成器

通过生成器创建的迭代器都是可迭代对象

生成器函数表达式,生成器函数声明

生成器也是函数,可以使用return语句提前推出函数执行,如果不设置值return空则就是相当于最后一次调用返回的是undefined,后面的yeild语句不会执行,如果return一个值,则返回对应的值,但若再次调用next(),还是会返回undefined。

//函数表达式
var xxx = function *(item){}
//函数声明
function *xxx(item){}
           
function* g() {
var o = 1;
yield o++;
yield o++;
}
var gen = g();
console.log(gen.next()); //  Object {value: 1, done: false}
var xxx = g();
console.log(gen.next()); // Object {value: 2, done: false}
console.log(xxx.next()); // Object {value: 1, done: false}
console.log(gen.next()); // Object {value: undefined, done: true}
           

generator和异步控制:

利用Generator函数的暂停执行的效果,可以把异步操作写在yield语句里面,等到调用next方法时再往后执行。这实际上等同于不需要写回调函数了,因为异步操作的后续操作可以放在yield语句下面,反正要等到调用next方法时再执行。所以,Generator函数的一个重要实际意义就是用来处理异步操作,改写回调函数。