标签搜索

ES6生成器函数

cicaba
2018-08-28 / 0 评论 / 5 阅读 / 正在检测是否收录...
//生成器函数以*和普通函数区分
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

评论 (0)

取消