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