- Generator
try-finally
prevents termination fromreturn
- The return value of the generator function is the value that was queued prior to entering the finally clause.
Example adapted from Exploring ES6: Generators. The following two ways are equivalent.
- Invoke
.return()
on generators:
function* genFunc2() {
try {
yield 'first yield';
} finally {
yield 'Not done, yet!';
}
}
> const genObj2 = genFunc2();
> genObj2.next()
{ value: 'first yield', done: false }
> genObj2.return('Result')
{ value: 'Not done, yet!', done: false }
> genObj2.next()
{ value: 'Result', done: true }
return
statement:
function* genFunc2() {
try {
yield 'first yield';
return 'Result';
} finally {
yield 'Not done, yet!';
}
}
> const genObj2 = genFunc2();
> genObj2.next()
Started
{ value: 'first yield', done: false }
> genObj2.next()
{ value: 'Not done, yet!', done: false }
> genObj2.next()
{ value: 'Result', done: true }