有没有办法在生成器的finally块中访问迭代器的最终值?
function*generator() {
try {
let value1 = yield(1)
let value2 = yield(2)
} finally {
console.log("Ending, how to access the result? (4)")
} }
var iterator = generator()
var result1 = iterator.next(1)
var result2 = iterator.return(4)
答案 0 :(得分:1)
不,无法访问传递给生成器内.return()
的参数。它与return
块中的try
语句相同 - 您只能覆盖finally
子句中的返回值,但不能读取它。
答案 1 :(得分:-1)
有没有办法在finally中访问迭代器的最终值 在发电机中阻塞?
是的,您只需return
最终值:
function* generator() {
try {
var value1 = yield(1) // cannot use let here
var value2 = yield(2) // cannot use let here
console.log('never gets here');
} finally {
return [value1, value2];
}
}
var iterator = generator(),
result0 = iterator.next(), // starts the generator
result1 = iterator.next("a"), // "a" gets assigned to value1
result2 = iterator.return("b"); // "b" does not get assigned to value2
console.log(result0); // { value: 1, done: false }
console.log(result1); // { value: 2, done: false }
console.log(result2); // { value: [ 'a', undefined ], done: true }
.return("b")
可能导致result2
成为{ value: 'b', done: true }
。但是,在上面的代码中return [value1, value2]
会覆盖"b"
。这使您可以访问finally
块中的最终结果。
无论您是否覆盖"b"
,它都不会传递给生成器本身进行处理,因此只能以result2.value
(如果没有覆盖)进行访问。