Spec-Zone.ru › JavaScript

Generator.prototype.throw()

Базовый уровень Широко доступен

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2016 года.

Метод throw() экземпляров Generator действует так, как если бы оператор throw был вставлен в тело генератора в текущей приостановленной позиции, что информирует генератор об условии ошибки и позволяет ему обработать ошибку, выполнить очистку и закрыть себя.

Синтаксис

generatorInstance.throw(exception)

Параметры

exception
Исключение для генерации. В целях отладки полезно сделать его instanceof Error.

Возвращаемое значение

Если сгенерированное исключение перехвачено оператором try...catch, и генератор возобновляет выдачу (yield) дополнительных значений, он вернет Object с двумя свойствами:

done
Булево значение:
  • true, если поток управления функции генератора достиг конца.
  • false, если функция генератора способна производить больше значений.
value
Значение, выданное следующим выражением yield.

Исключения

TypeError
Генерируется, если генератор уже запущен.

Если exception не перехвачено оператором try...catch внутри функции генератора, оно также генерируется вызывающей стороне throw().

Описание

Метод throw() при вызове можно рассматривать так, как если бы оператор throw exception; был вставлен в тело генератора в текущей приостановленной позиции, где exception является исключением, переданным методу throw(). Следовательно, в типичном потоке вызов throw(exception) приведет к генерации исключения генератором. Однако, если выражение yield обернуто в блок try...catch, ошибка может быть перехвачена, и поток управления может либо возобновиться после обработки ошибки, либо корректно завершиться.

Примеры

Использование throw()

Следующий пример показывает генератор и ошибку, которая генерируется с помощью метода throw. Ошибка может быть перехвачена блоком try...catch как обычно.

function* gen() {
  while (true) {
    try {
      yield 42;
    } catch (e) {
      console.log("Error caught!");
    }
  }
}

const g = gen();
g.next();
// { value: 42, done: false }
g.throw(new Error("Something went wrong"));
// "Error caught!"
// { value: 42, done: false }

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-generator.prototype.throw

Совместимость с браузерами

Десктопные Мобильные Серверные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
throw
39
13
26
26
10
39
26
26
10
4.0
39
10
1.0.0
1.0
4.0.0

Смотрите также

  • function*

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/throw

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API