是否有访问迭代器的最终值在最后 块在发电机的方法吗?
是的,你可以简单地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
(如果不覆盖)访问。
难道你不能只声明'try'外的值吗? – Carcigenicate
不,该值由iterator.return(value) –