Generator
//这里加了一个 * 号,一旦加了就叫生成器函数
function* gen(){
//这里的每一个 yield 相当于生成了每一个状态节点,执行到每一个节点 next() 都会返回结果。
yield 1;
yield 2;
yield 3;
}
//注意这里 Generator 并没有执行生成器函数里面的代码,返回结果是 Interator 迭代器(ES6:for of 循环)
const inter = gen();
//这里会返回一个 Interator 迭代器,如果想执行就需要用到 Interator 中的 next() 方法
console.log(inter.next())
console.log(inter.next())
console.log(inter.next())
console.log(inter.next())
从图上可以看出,当我们执行第一次 done 属性返回 false ,这里的代表如果还有 next() 可以继续往下执行,返回 true 表示之后就没有节点了,返回 undefined 。
注意 next 可以传值,但是第一次不能赋值,从第二次开始才能赋值 例子:
function* fn(){
console.log(1)
let v1 = yield 1
console.log(2)
console.log(v1)
let v2 = yield 2
console.log(3)
console.log(v2)
let v3 = yield 3
}
const inter = fn()
inter.next()
//这里传递的值是在给 v1 赋值
inter.next(10)
inter.next()