2016-12-18 6 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

'try'외부의 값만 선언 할 수는 없습니까? – Carcigenicate

+0

아니요, 값은 iterator.return (value)에 의해 외부에서 결정됩니다. –

답변

0

발전기에 최종적 블록 반복기의 최종 값에 액세스하는 방법 있는가?

예, 할 수 있습니다 단순히 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 블록의 최종 결과에 액세스 할 수 있습니다.

을 덮어 썼는지 여부와 상관없이 처리를 위해 생성기 자체로 전달되지 않으므로 result2.value (덮어 쓰지 않는 경우)으로 만 액세스 할 수 있습니다.

0

아니요, 생성자 내부의 .return()에 전달 된 인수에 액세스 할 수 없습니다. try 블록 안에있는 return 문과 동일합니다. finally 절의 반환 값만 덮어 쓸 수 있지만 읽을 수는 없습니다.