javascript - 使用 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)
}
解决方案
如果您想将某些东西传回,您需要负责调用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")
}
推荐阅读
- python - “命令引发异常:AttributeError 'Nonetype' 对象没有属性 'id'” 给予设定角色时
- java - 使用 IDA* 和曼哈顿解决难题 NxN
- html - 在图像元素上组合 css 动画
- python - 是什么阻止了我在这个 Discord Bot 中的主线程?
- highcharts - Highcharts sankey 可拖动节点
- prometheus - 如果 Prometheus/Pushgateway 有旧数据,Grafana 会发出警报
- c# - Unity3d Resources.Load() 为静态变量返回 null
- python - 在 DataFrame 中填充 NaN 的快速方法
- html - 标题 div 背景 100% 宽度,固定高度
- sql - 处理数组和无数组条目的 Postgres JSONB 列选择语句