2016-12-18 8 views
2

ジェネレータの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

「試行」の外で値を宣言するだけでいいですか? – Carcigenicate

+0

いいえ、値は外部でiterator.return(value)によって決定されます。 –

答えて

0

発電機にようやく ブロック内のイテレータの最終値にアクセスする方法がありますか?

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"){ value: 'b', done: true }になってresult2を得たが:はい、あなたは、単にreturn最終値ができ

。しかし、上記コードreturn [value1, value2]"b"を上書きします。これにより、finallyブロックの最終結果にアクセスできます。

を上書きするかどうかに関係なく、処理のためにジェネレータ自体に渡されることはないため、(上書きされない場合)result2.valueとしてのみアクセスできます。

0

いいえ、ジェネレータ内部の.return()に渡された引数にアクセスすることはできません。 tryブロック内のreturnステートメントと同じです。finally句の戻り値のみを上書きできますが、読み取ることはできません。

関連する問題