在使用for循环时,如何将值传递回生成器函数

时间:2018-05-05 16:39:26

标签: javascript

我正在学习生成器和迭代器,我无法弄清楚,也没有找到有关如何使用for of循环迭代对象时将值传递回生成器对象的任何细节。我想在每次迭代时传回计数器值。这怎么可能?

function generate(time, id) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log(`ALERT: ${id}`)
      resolve(`${id} success.`)
    }, time)
  })
}

function* generator() {
  const testA = yield generate(3000, 'A')
  console.log(`Returned: ${testA}`)
  const testB = yield generate(500, 'B')
  console.log(`Returned: ${testB}`)
  const testC = yield generate(300, 'C')
  console.log(`Returned: ${testC}`)
}

async function test() {
  let counter = 1
  const genObj = generator()
  // await genObj.next(counter).value
  // counter += 1
  // await genObj.next(counter).value
  for (x of genObj) {
    console.log('From here.')
    const t = await x
    counter += 1
    console.log(t)
  }
}

test()

1 个答案:

答案 0 :(得分:2)

根据规范,这是不可能的,因为在for ... of

等迭代器循环中使用时,内部没有参数传递给next()方法
  

https://www.ecma-international.org/ecma-262/6.0/#sec-iterator-interface

     

for-of语句和迭代器的其他常见用户不通过   任何参数,所以期望在这样的一个中使用的Iterator对象   必须准备好处理没有参数被召唤的方式。

因此,在您的情况下,您必须执行明确调用next()

的循环