📜  JavaScript | Generator.prototype.next() 方法(1)

📅  最后修改于: 2023-12-03 14:42:28.092000             🧑  作者: Mango

JavaScript | Generator.prototype.next() 方法

Generator 是 ES6 中引入的新特性,它可以让开发者在函数中使用 yield 关键字,使得函数可以在每次调用时停止执行,而不是把所有代码执行完毕再返回结果。

Generator.prototype.next() 方法是 Generator 对象上的一个方法,它可以使 Generator 函数继续执行,直到下一个 yield 关键字。

语法
generator.next(value);

参数:

  • value:传递给 Generator 函数中上一个 yield 的返回值,可以是任意值,也可以省略不传递。

返回值:

  • 一个包含 valuedone 两个属性的对象,其中,value 表示执行到当前状态时 yield 关键字返回的值,done 表示当前 Generator 函数是否已经执行完毕。
示例

让我们看一个简单的 Generator 函数示例:

function* counter() {
  let i = 0;
  while (true) {
    yield i++;
  }
}

const gen = counter();

console.log(gen.next()); // { value: 0, done: false }
console.log(gen.next()); // { value: 1, done: false }
console.log(gen.next()); // { value: 2, done: false }

以上代码中,我们定义了一个名为 counter 的 Generator 函数。在 counter 函数中,我们使用了一个 while 循环,并且在每次循环中使用了 yield 关键字来返回一个值。

接着,我们创建了一个 gen 对象,并将 counter() 的执行结果赋值给它。然后,我们分别执行了三次 gen.next() 方法,并分别将返回值打印出来。

第一次执行 gen.next() 时,会执行 counter 函数,并将 yield i++ 的结果 0 返回,此时对象的 done 属性为 false,说明 counter 函数还未执行完毕。

第二次执行 gen.next() 时,counter 函数从上次停止的地方继续执行,并将 yield i++ 的结果 1 返回。

第三次执行 gen.next() 时,同样会从上次停止的地方继续执行,将 yield i++ 的结果 2 返回。

结论

Generator.prototype.next() 方法是操作 Generator 函数的重要方法之一,通过它可以使得 Generator 函数依次执行,并返回想要的结果。在实际开发中,我们可以将 Generator 函数应用于异步编程、状态机等场景中,提高代码的可读性和维护性。