是否有訪問迭代器的最終值在最後 塊在發電機的方法嗎?
是的,你可以簡單地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) –