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表达式
的值hello
,done
属性的值false
,表示遍历还没有结束。
网友评论