我正在学习生成器和迭代器,我无法弄清楚,也没有找到有关如何使用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()
答案 0 :(得分:2)
根据规范,这是不可能的,因为在for ... of
https://www.ecma-international.org/ecma-262/6.0/#sec-iterator-interface
for-of语句和迭代器的其他常见用户不通过 任何参数,所以期望在这样的一个中使用的Iterator对象 必须准备好处理没有参数被召唤的方式。
因此,在您的情况下,您必须执行明确调用next()