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

js
generatorInstance.throw(exception)

Parameter

exception

Die Ausnahme, die ausgelöst werden soll. Für Debugging-Zwecke ist es nützlich, sie zu einem instanceof Error zu machen.

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:

done

Ein boolescher Wert:

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

Der Wert, der von dem nächsten yield-Ausdruck geliefert wird.

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.

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

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch