Generator函数学习笔记

2019-01-04  本文已影响8人  小编

Generator 函数是 ES6 提供的一种异步编程解决方案。
Generator 函数可以理解为是一个状态机,封装了多个内部状态。
也可以理解为是遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。

执行时机

function* gen(){
    console.log('执行了')
}
gen();//cosole.log()并未执行

与普通函数不同的是,直接调用gen函数,里面的代码并未执行。
作为generator函数,需调用next方法才会执行,如下:

function* gen(){
    console.log('执行了')
}
let g = gen();
let next = g.next();

console.log(g);//{}
console.log(next);//{ value: undefined, done: true }

暂停标记

yield表达式是暂停执行的标记,而next方法可以恢复执行。
注意:yield表达式是暂停标记,不是yield。【PS:以前我以为是后者,越看越懵】

function* gen(){
    console.log('执行了')
    yield 'hello';
    console.log('hello之后执行');
    yield 'world';
}
let g = gen();
let next = g.next();
console.log(next)
//执行了
//{ value: 'hello', done: false }

从上述代码看出,第二行代码执行了,console.log显示出value的值。显然执行了yield 'hello'这个表达式后,暂停执行。
next方法返回一个对象,它的value属性就是当前yield表达式的值hellodone属性的值false,表示遍历还没有结束。

上一篇下一篇

猜你喜欢

热点阅读