使用for of循环向生成器传递值

4
当使用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)
}
1个回答

6
如果您想传递回一些内容,您需要负责调用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")
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接