//生成器函数以*和普通函数区分
function* gen(a){
yield a+1;
yield a+2;
}
let nbm = gen(0);
console.log(nbm.next()); //{value: 1, done: false}
console.log(nbm.next()); //{value: 2, done: false}
调用 Generator 函数,会返回一个内部指针(即遍历器 )g 。这是 Generator 函数不同于普通函数的另一个地方,即执行它不会返回结果,返回的是指针对象。调用指针 g 的 next 方法,会移动内部指针(即执行异步任务的第一段),指向第一个遇到的 yield 语句,上例是执行到 a + 2 为止,再次调用g的next的方法,内部指针指向下个yield语句。
next传参
function* gen(){
let a = yield 1;
if(a){
yield a+2;
}
}
let nbm = gen(0);
console.log(nbm.next()); //{value: 1, done: false}
console.log(nbm.next(12)); //{value: 14, done: false}
还可以将参数传递给 next 并使用该参数修改生成器的状态,以创建更高级的生成器。 next 将成为之前执行的 yield 表达式的结果值
next 方法的作用是分阶段执行 Generator 函数。每次调用 next 方法,会返回一个对象,这个对象就是具有两个属性(done (done=false) 和 value (value=operand))的 IteratorResult 对象。value 属性是 yield 语句后面表达式的值,表示当前阶段的值;done 属性是一个布尔值,表示 Generator 函数是否执行完毕,即是否还有下一个阶段。这里说明了Generator 函数可以暂停执行和恢复执行,这是它能封装异步任务的根本原因。
评论 (0)