발전기에 최종적 블록 반복기의 최종 값에 액세스하는 방법 있는가?
예, 할 수 있습니다 단순히 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
(덮어 쓰지 않는 경우)으로 만 액세스 할 수 있습니다.
'try'외부의 값만 선언 할 수는 없습니까? – Carcigenicate
아니요, 값은 iterator.return (value)에 의해 외부에서 결정됩니다. –