Generator
Generator 是什么
Generator 本质是由 generator 函数返回的一个可迭代对象
Generator 最大的特点就是可以交出函数的控制权
使用 Generator 可以更加灵活的进行异步编程
Generator 的语法
Generator 是一个由 generator 函数返回的对象,通过配合 yield 关键字可以暂停和恢复 generator 函数的执行
generator 函数的语法
function* 函数名 () {
yield 代码块1;
yield 代码块2;
yield 代码块3...
}
generator 函数需要使用 * 作为标识符,来声明该函数为 generator 函数
yield 关键字
yield 关键字相当于 generator 函数的暂停键,代码执行到 yield 关键字的时候将会被暂停
yield 关键字会返回一个 IteratorResult 对象,他有两个属性,一个 value ,另一个是 done
value 就是返回的值
而 done 是 yield 执行状态,如果 为 true 则 yield 后米您的代码块已被执行,如果为 false ,则 yield 后面的代码块还未执行
使用 Generator.prototype.next 方法能够控制函数继续向下执行
Generator.prototype.next
Generator.prototype.next 方法能够控制 generator 函数向下执行,而不是在 yield 处继续暂停
语法:
generator函数名.next(config)
next 方法接收一个参数,可以替换上一个 yield 关键字返回的 iteratorResult 的 value
function* g_fn (n) {
let value = yield n++;
console.log(value);
yield n++;
};
const g = g_fn(1) //将指针指针指向函数内部
console.log(g.next()); //1
//控制台会输出999
console.log(g.next(999)); //2
但是也只会替换上一次的结果,下一次的运算还是会继续,一只到运行到最后一个 yield,IteratorResult 的 value 返回 undefined