首页 > 解决方案 > 使用 for of 循环将值传递给生成器

问题描述

当使用循环迭代生成器时for of,有没有办法将值传递回生成器?

在下面的代码中,当我iterable.next('some value')手动调用时,我可以传回一个值,但是for of循环似乎调用了.next()没有任何值的方法。

我希望我已经以一种可以理解的方式解释了这一点。

const test = function* generator() {
  const list = [1, 2, 3, 4]
  for (const x of list) {
    const data = yield x
    console.log(data)
  }
}
const iterable = test()
console.log(iterable.next())
console.log(iterable.next('test2'))

console.log('FOR OF LOOP')
for (const y of iterable) {
  console.log(y)
}

标签: javascript

解决方案


如果您想将某些东西传回,您需要负责调用next()您不能只是将其委托给for…of.

使用循环执行此操作是惯用的while,但您也可以使用for循环执行此操作。例如:

const test = function* generator() {
  const list = [1, 2, 3, 4]
  for (const x of list) {
    const data = yield x
    console.log("passed in value: ", data)
  }
}
const iterable = test()
console.log('FOR OF LOOP')
let message = 0
for (let y = iterable.next(); !y.done; y = iterable.next(++message)) {
  console.log(y.value)
}

while循环:

const test = function* generator() {
  const list = [1, 2, 3, 4]
  for (const x of list) {
    const data = yield x
    console.log("passed in value: ", data)
  }
}

const iterable = test()
let message = iterable.next()
while(!message.done){
  console.log(message.value)
  message = iterable.next("some value")
}


推荐阅读