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 suspendierten Position im Körper des Generators eingefügt wird. Dies informiert den Generator über einen Fehlerzustand und ermöglicht es ihm, den Fehler zu behandeln, oder aufzuräumen und sich selbst zu schließen.

Syntax

js
generatorInstance.throw(exception)

Parameter

exception

Die auszulösende Ausnahme. Zu Debugging-Zwecken ist es nützlich, wenn es ein instanceof Error ist.

Rückgabewert

Wenn die ausgelöste Ausnahme von einem try...catch abgefangen wird und der Generator fortfährt, um mehr Werte zu liefern, wird ein Object mit zwei Eigenschaften zurückgegeben:

done

Ein boolean Wert:

  • true, wenn der Kontrollfluss der Generatorfunktion das Ende erreicht hat.
  • false, wenn die Generatorfunktion in der Lage ist, weitere Werte zu erzeugen.
value

Der von dem nächsten yield Ausdruck gelieferte Wert.

Ausnahmen

TypeError

Wird ausgelöst, wenn der Generator bereits läuft.

Wenn die exception innerhalb der Generatorfunktion nicht von einem try...catch abgefangen wird, wird sie auch an den Aufrufer von throw() weitergegeben.

Beschreibung

Die throw() Methode kann bei Aufruf so gesehen werden, als ob eine throw exception; Anweisung an der aktuellen suspendierten Position im Körper des Generators eingefügt wird, wobei exception die an die throw() Methode übergebene Ausnahme ist. Daher führt ein typischer Ablauf beim Aufruf von throw(exception) dazu, dass der Generator wirft. Wenn jedoch der yield Ausdruck in einem try...catch Block eingeschlossen ist, kann der Fehler abgefangen werden und der Kontrollfluss kann entweder nach der Fehlerbehandlung fortfahren oder ordentlich beendet werden.

Beispiele

Verwendung von throw()

Das folgende Beispiel zeigt einen Generator und einen Fehler, der mit der throw Methode ausgelöst wird. Ein Fehler kann wie üblich von einem try...catch Block abgefangen werden.

js
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® 2025 Language Specification
# sec-generator.prototype.throw

Browser-Kompatibilität

Siehe auch