05. Generator .return()
Вызов generator.return(x) завершает выполнение генератора со значением x;
return(x)завершает функцию генератор, выполняяreturn xна месте текущего приостановленногоyield.return()используется для остановки и закрытия генератора.Новые вызовы
generator.next()больше не имеют смысла. Впрочем, если они и будут, то не вызовут ошибки, но будут возвращать один и тот же объект:{done: true}.«Открутить назад» завершившийся генератор нельзя.
You can prevent return() from terminating the generator if you yield inside the finally clause (using a return statement in that clause is also possible):
function* generatorFunction() {
try {
console.log("Started");
yield;
} finally {
yield "Not done, yet!";
}
}This time, return() does not exit the generator function. Accordingly, the property done of the object it returns is false. You can invoke next() one more time. Similarly to non-generator functions, the return value of the generator function is the value that was queued prior to entering the finally clause.
const generator = generatorFunction();
generator.next(); // { value: undefined, done: false }
generator.return("Result"); // { value: 'Not done, yet!', done: false }
generator.next(); // { value: 'Result', done: true }Returning a value from a newborn generator (that hasn’t started yet) is allowed:
function* genFunc() {}
genFunc().return("yes");
// { value: 'yes', done: true }Last updated
Was this helpful?