js生成器Generator
使用 function* 语法和一个或多个 yield 表达式以创建一个函数即为生成器,当然它的返回值就是一个迭代器即生成器。
Generator可以使函数分段执行,yield 可以返回值。调用使用next
它不同于普通函数,是可以暂停执行的,所以函数名之前要加星号,以示区别。其实整个 Generator 函数就是一个封装的异步任务,或者说是异步任务的容器。异步操作需要暂停的地方,都用 yield 语句注明。
next 方法的作用是分阶段执行 Generator 函数。每次调用 next 方法,会返回一个对象,这个对象就是具有两个属性(done (done=false) 和 value (value=operand))的 IteratorResult 对象。value 属性是 yield 语句后面表达式的值,表示当前阶段的值;done 属性是一个布尔值,表示 Generator 函数是否执行完毕,即是否还有下一个阶段。
// 生成器Generator
function* fun() {
console.log(1);
let a = yield "aa";
console.log(a);
let b = yield "bb";
console.log(b);
}
let genObj = fun();
let i = genObj.next(10); //输出1
let j = genObj.next(20); //输出2
let m = genObj.next(30); //输出3
console.log(i, j, m); //{value: "aa", done: false} {value: "bb", done: false} {value: undefined, done: true}