考虑以下迭代器。它产生字符串 'foo' 和 'bar',然后返回 'quux' 作为返回值。我可以使用
我能想到的唯一解决办法是编写一个间谍程序,监视迭代并将返回值作为副作用存储到预定义变量中,然后在
Array.from
从迭代器中提取产出物,但如果我这样做,就没有办法读取返回值了。由于 Array.from
已经接收(并丢弃?)了返回值作为协议的一部分,因此返回值不再由迭代器返回。const iterator = (function* () {
yield 'foo'
yield 'bar'
return 'quux'
})()
const [foo, bar] = Array.from(iterator)
const quux = // ???
我能想到的唯一解决办法是编写一个间谍程序,监视迭代并将返回值作为副作用存储到预定义变量中,然后在
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))
Generator<number, number, never>
保证始终至少包含一个数字,而Generator<number, void, never>
可能不包含任何值。 - cyberixae