Generator

129 阅读1分钟

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