gpt4 book ai didi

javascript - 捕获 JavaScript 迭代器的返回值

转载 作者:行者123 更新时间:2023-12-04 09:21:45 25 4
gpt4 key购买 nike

考虑以下迭代器。它产生字符串 'foo' 和 'bar' 然后返回 'quux' 作为返回值。我可以使用 Array.from从迭代器中提取 yield ,但如果我这样做,我无法读出返回值。迭代器不再返回返回值,因为 Array.from作为协议(protocol)的一部分已经收到(并丢弃?)它。

const iterator = (function* () {
yield 'foo'
yield 'bar'
return 'quux'
})()
const [foo, bar] = Array.from(iterator)
const quux = // ???
我能想到的唯一解决方案是编写一个监视迭代并将返回值存储到预定义变量中的 spy 程序,作为 Array.from 之前的副作用。丢弃返回值。是否有更好的替代方法来访问返回值?
let quux
const spy = function* (i) { /* extract return value from i and store it to quux */ }
const [foo, bar] = Array.from(spy(iterator))

最佳答案

你是对的 - 当迭代器 next函数返回 { done: true, value: 'whatever' }该值被默默地丢弃。
正如您已经说过的,您可以编写一个包装函数(或一个类,如果您愿意)。但不是将它保存到外部变量,您可以让它将最后一个值转换为常规迭代值。
例如:

function* yieldFinal (iterator) {
let done, value
do {
({ done, value } = iterator.next())
yield value
} while (!done)
}

const iterator = (function* () {
yield 'foo'
yield 'bar'
return 'quux'
})()

const [foo, bar, quux] = Array.from(yieldFinal(iterator))

console.log(foo, bar, quux)
(注意:如果没有明确的返回值,那么你会得到 undefined 作为最后一个值。)
但是,那么问题是,为什么你甚至需要达到这些长度?而不是写 return 'quux'你可以写 yield 'quux'; return并在不经历所有障碍的情况下实现相同的目标......

关于javascript - 捕获 JavaScript 迭代器的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63094499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com