传值到next方法中

在使用Generator函数时,我们可以传值给next方法,再次调用Generator函数时,我们可以在上次退出Generator函数的yield表达式处使用该值。让我们通过以下例子,来了解这一特性:

code/generators/pass-next.js

function* myGenerator(n) {
  const a = (yield 10) + n
  yield a
}
const g = myGenerator(1)
g.next().value // --> 10
g.next(100).value // --> 101

分析上面的代码,看看都发生了些什么:

  • 首先,我们使用参数1调用了Generator函数,并把返回的Generator对象赋值给变量g。这里没有什么特别的。
  • 接着,我们调用g.next开始执行Generator函数,当碰到第一个yield表达式(const a =(yield 10))时退出。此时,生成的值为10。
  • 再次,我们调用g.next,并传入参数100。Generator函数恢复执行,并从+ n的地方开始,但不再使用(yield 10),而是使用参数100替换它。所以,最终为const a = 100 + n,此时n为1。直到执行到下一个yield表达式之前,该函数退出。所以,生成的值为101。

在后续部分,我们将使用Generator函数的这一特性来处理一些异步任务。

用户头像
登录后发表评论