← 返回首页
exnref: Wasm-Wertetyp - WebAssembly | MDN

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

exnref: Wasm-Wertetyp

Der exnref-Wertetyp repräsentiert eine geworfene Ausnahme in einem Wasm-Modul, sodass sie erneut geworfen werden kann.

In diesem Artikel

Probieren Sie es aus

(module ;; Import error tag (tag $my_error (import "env" "my_error") (param i32)) (func $try_and_rethrow (param $value i32) ;; Define a variable to store an exnref (local $err exnref) (block $handler (result i32 exnref) (try_table (catch_ref $my_error $handler) (call $might_throw (local.get $value)) ) (return) ) ;; catch_ref returns error value and exnref ;; Stack is now: i32, exnref (exnref on top) (local.set $err) ;; pop exnref (drop) ;; drop the i32 payload (local.get $err) ;; push exnref back (throw_ref) ) ;; Function that throws an error of type $my_error ;; when its parameter is less than 0 (func $might_throw (param $value i32) (local.get $value) (i32.const 0) (i32.lt_s) (if (then (i32.const 42) (throw $my_error) ) ) ) (export "try_and_rethrow" (func $try_and_rethrow)) )
// Define error tag in JS const myErrorTag = new WebAssembly.Tag({ parameters: ["i32"] }); // Import the tag into the module const env = { my_error: myErrorTag, }; WebAssembly.instantiateStreaming(fetch("{%wasm-url%}"), { env }).then( (result) => { try { // Negative value causes function to throw result.instance.exports.try_and_rethrow(-1); } catch (e) { if (e instanceof WebAssembly.Exception && e.is(myErrorTag)) { // 0 is the first payload value, which is equal to 42 const errorCode = e.getArg(myErrorTag, 0); console.log("Error code:", errorCode); } else { // Throw other errors throw e; } } }, );

Syntax

wat
;; Define variable to hold exnref (local $err exnref)

Beschreibung

Der exnref-Typ repräsentiert eine geworfene Ausnahme in einem Wasm-Modul. Dieser Werttyp wird von den catch_ref und catch_all_ref Klauseln zurückgegeben, wodurch eine Referenz auf die gerade geworfene Ausnahme bereitgestellt wird. Diese kann bei Bedarf mit dem Befehl throw_ref erneut geworfen werden.

Die WebAssembly.Exception JavaScript-Schnittstelle repräsentiert eine Wasm-Ausnahme im JavaScript-Host.

Hinweis: Sie können keine Wasm-Funktion von JavaScript aus aufrufen, die einen exnref-Wert als Parameter oder Ergebnis hat. Ein solcher Versuch führt zu einem Fehler.

Siehe auch