Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Die try_table Ausnahmebehandlungsanweisung ermöglicht es Ihnen, einen Codeblock zu testen, um festzustellen, ob eine Ausnahme geworfen wird, und diese Ausnahme in einer catch-Klausel zu behandeln.
Die try_table-Anweisung.
blocktype OptionalGibt einen oder mehrere Parameter an, die in den try_table-Block übergeben werden und nach Ausführung des Blocks als Ergebniswert bereitgestellt werden.
catch*Eine oder mehrere catch-Klauseln, die jeweils Kriterien für das Abfangen von Ausnahmen darstellen und angeben, zu welchem block als Ergebnis verzweigt wird. Jede Klausel kann eine der folgenden sein:
instruction*Null oder mehr Anweisungen, die innerhalb des try-Blocks ausgeführt werden sollen.
Null oder mehr Parameterwerte, die vom try_table-Block verbraucht werden, wie im blocktype deklariert.
result*Null oder mehr Ergebniswerte, die vom try_table-Block produziert werden, wie im blocktype deklariert.
| try_table | 0x1f bt:blocktype n:u32 (ct:catch)^n instruction* 0x0b |
Ein grundlegendes try_table mit einer einzelnen catch-Klausel:
Würde wie folgt codiert:
0x1f 0x40 0x01 0x00 0x00 0x00 ...instructions binary... 0x0bEine try_table-Anweisung, kombiniert mit catch-Klauseln, bildet das Wasm-Äquivalent einer JavaScript-try...catch-Anweisung. Die Anweisungen innerhalb des try_table-Blocks werden ausgeführt, und wenn eine Ausnahme geworfen wird, die von den verfügbaren catch-Klauseln abgefangen wird, verzweigt der Code zum angegebenen äußeren block, und die von der catch-Klausel produzierten Werte werden auf den Stapel gelegt.
Die unterschiedlichen catch-Klauseln verhalten sich wie folgt:
catchWenn eine Ausnahme mit einem passenden Tag geworfen wird, verzweigen Sie zum angegebenen block und legen die Nutzlastwerte auf den Stapel.
catch_allWenn irgendeine Ausnahme geworfen wird, verzweigen Sie zum angegebenen block, ohne etwas auf den Stapel zu legen.
catch_refWenn eine Ausnahme mit einem passenden Tag geworfen wird, verzweigen Sie zum angegebenen block und legen die Nutzlastwerte sowie einen exnref-Wert, der die Ausnahme darstellt, auf den Stapel.
catch_all_refWenn irgendeine Ausnahme geworfen wird, verzweigen Sie zum angegebenen block und legen einen exnref-Wert, der die Ausnahme darstellt, auf den Stapel.
Jede catch-Klausel, die zu einem äußeren block verzweigt, muss Werte produzieren, die dem Ergebnistyp dieses blocks entsprechen, wenn eine geworfene Ausnahme abgefangen wird.
Die optionalen blocktypen Parameter werden in den try_table-Block übergeben und als Ergebniswert bereitgestellt, nachdem der Block ausgeführt wurde. Der Wert kann vor dem try_table-Block oder innerhalb davon angegeben werden. Zum Beispiel:
Oder:
Oder Sie können jede Kombination dieser Strukturen verwenden.
Dieses Beispiel zeigt, wie mehrere Ausnahmen in einer einzigen try_table-Struktur behandelt werden können.
In unserem Skript beginnen wir damit, eine Referenz zu einem <p>-Element zu erhalten, auf dem wir Ergebnisse ausgeben werden. Wir definieren dann zwei verschiedene Fehler-Tags, um einen Typfehler und einen Bereichsfehler zu repräsentieren, indem wir den WebAssembly.Tag()-Konstruktor verwenden.
Als nächstes kompilieren und instanziieren wir unser Wasm-Modul mit der Methode WebAssembly.instantiateStreaming(), indem wir die beiden Fehler-Tags importieren und eine Funktion, um Ergebnisse in das <p>-Element zu protokollieren.
Wir rufen die exportierte Wasm-try_multiple()-Funktion auf, die im WebAssembly-Instance-exports-Objekt verfügbar ist, mehrfach auf, indem wir ihr zwei verschiedene Parameter übergeben, um unterschiedliche Ausnahmen zu werfen, und schließlich einen Wert, der keine Ausnahme wirft.
In unserem Wasm-Modul importieren wir zuerst unsere zwei Fehler-Tags und die Protokollfunktion. Dann erstellen wir eine Funktion namens $try_multiple, die zwei verschachtelte blocks hat, um $type_errors und $range_errors zu behandeln. In der Mitte der blocks befindet sich eine try_table-Struktur, die zwei catch-Klauseln enthält, um jeden Fehler abzufangen. Wir rufen dann die Funktion $might_throw auf, um zu sehen, ob sie Ausnahmen wirft:
Die Funktion $might_throw selbst nimmt einen einzigen Parameter und überprüft dessen Wert. Wenn der Wert kleiner als 0 ist, wirft sie einen $type_error mit dem Fehlercode 10. Wenn der Wert größer als 100 ist, wirft sie einen $range_error mit dem Code 99.
Wir rufen die try_multiple()-Funktion dreimal auf. Das erste Mal wird ein $type_error geworfen, daher wird der Fehlercode 10 protokolliert. Das zweite Mal wird ein $range_error geworfen, daher wird der Fehlercode 99 protokolliert. Das dritte Mal wird keine Ausnahme geworfen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.