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

View in English Always switch to English

WebAssembly.JSTag

Die JSTag-Eigenschaft im Nur-Lese-Modus des WebAssembly Interfaces ist ein eingebautes WebAssembly.Tag, das Ausnahmen repräsentiert, die im JavaScript-Host geworfen werden — es ermöglicht, dass Ausnahmen, die in JavaScript geworfen werden, innerhalb eines Wasm-Moduls behandelt werden.

Probieren Sie es aus

(module
  (tag $js_tag (import "env" "js_tag") (param externref))
  (import "env" "do_work" (func $do_work))
  (import "env" "log" (func $log (param externref)))

  (func $try_and_catch
    (block $handler (result externref)
      (try_table (catch $js_tag $handler)
        ;; Call a JS function that throws
        (call $do_work)
      )
      (return)
    )
    ;; The JS Error object is on the stack as an externref
    ;; Pass it back to JS for logging
    (call $log)
  )

  (export "try_and_catch" (func $try_and_catch))
)
async function run() {
  const { instance } = await WebAssembly.instantiateStreaming(
    fetch("{%wasm-url%}"),
    {
      env: {
        js_tag: WebAssembly.JSTag,
        // This JS function throws, which Wasm will catch via JSTag
        do_work() {
          throw new Error("An exception was thrown in JS");
        },
        log(error) {
          // errRef is the JS Error object passed back as an externref
          console.log(error.message);
        },
      },
    },
  );

  instance.exports.try_and_catch();
}

run();

Wert

Ein WebAssembly.Tag mit einem Typ von externref ((tag (param externref))).

Spezifikationen

Spezifikation
WebAssembly JavaScript Interface
# dom-webassembly-jstag

Browser-Kompatibilität

Siehe auch