Generator.prototype.throw()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
Die throw()
-Methode von Generator
Instanzen wirkt, als ob eine throw
-Anweisung an der aktuellen angehaltenen Position im Körper des Generators eingefügt wird, was den Generator über einen Fehlerzustand informiert und es ihm ermöglicht, den Fehler zu handhaben oder eine Bereinigung durchzuführen und sich selbst zu schließen.
Syntax
generatorInstance.throw(exception)
Parameter
Rückgabewert
Wenn die geworfene Ausnahme von einem try...catch
eingefangen wird und der Generator fortfährt, mehr Werte zu liefern, wird er ein Object
mit zwei Eigenschaften zurückgeben:
Ausnahmen
Wenn die geworfene Ausnahme nicht von einem try...catch
eingefangen wird, wird die exception
, die an throw()
übergeben wird, aus der Generatorfunktion herausgeworfen.
Beschreibung
Die throw()
-Methode kann, wenn sie aufgerufen wird, so gesehen werden, als ob eine throw exception;
-Anweisung an der aktuellen angehaltenen Position im Körper des Generators eingefügt wird, wobei exception
die an die throw()
-Methode übergebene Ausnahme ist. Folglich wird in einem typischen Ablauf beim Aufruf von throw(exception)
der Generator dazu gebracht, die Ausnahme zu werfen. Wenn der yield
-Ausdruck jedoch in einem try...catch
-Block eingeschlossen ist, kann der Fehler aufgefangen werden und der Kontrollfluss kann entweder nach der Fehlerbehandlung fortgesetzt oder geordnet beendet werden.
Beispiele
Verwendung von throw()
Das folgende Beispiel zeigt einen einfachen Generator und einen Fehler, der mit der throw
-Methode geworfen wird. Ein Fehler kann wie üblich mit einem try...catch
-Block aufgefangen werden.
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 }
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-generator.prototype.throw |
Browser-Kompatibilität
BCD tables only load in the browser