Generator.prototype.throw()
Базовый уровень Широко доступен
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2016 года.
Метод throw() экземпляров Generator действует так, как если бы оператор throw был вставлен в тело генератора в текущей приостановленной позиции, что информирует генератор об условии ошибки и позволяет ему обработать ошибку, выполнить очистку и закрыть себя.
Синтаксис
generatorInstance.throw(exception)
Параметры
-
exception - Исключение для генерации. В целях отладки полезно сделать его
instanceofError.
Возвращаемое значение
Если сгенерированное исключение перехвачено оператором 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 }
Спецификации
Совместимость с браузерами
| Десктопные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
Смотрите также
© 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