06. Generator .throw()

Вызов generator.throw(x) выполняет throw x на месте текущего приостановленного yield. На строке с yield возникает исключение, которое может быть перехвачено. Если ошибку не перехватить, то она «выпадет» из генератора.

function* gen() {
  // В этой строке возникнет ошибка
  let result = yield "Сколько будет 2 + 2?";
}

let generator = gen();
let question = generator.next().value;

try {
  generator.throw(new Error("ответ не найден в моей базе данных"));
} catch (e) {
  alert(e); // выведет ошибку
}

Throwing an exception in a newborn generator (that hasn’t started yet) is allowed:

function* genFunc() {}
genFunc().throw(new Error("Problem!"));
// Error: Problem!

Last updated