| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/WebAssembly/Reference/JavaScript_interface/Exception/getArg | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit Mai 2022 browserbergreifend verfgbar.
Die getArg() Methode des Exception Objekts kann verwendet werden, um den Wert eines bestimmten Elements in den Datenargumenten der Ausnahme zu erhalten.
getArg(exceptionTag, index)
exceptionTagEin WebAssembly.Tag, das mit dem Tag bereinstimmen muss, das mit dieser Ausnahme verbunden ist.
indexDer Index des Wertes in den Datenargumenten, der zurckgegeben werden soll.
Der Wert des Arguments bei index.
TypeErrorDie Tags stimmen nicht berein; die Ausnahme wurde nicht mit dem an die Methode bergebenen Tag erstellt.
RangeErrorDer Wert des index-Parameters ist grer oder gleich der Anzahl der Felder in den Daten.
Die getArg() Methode akzeptiert ein WebAssembly.Tag als Parameter und wird nur erfolgreich sein, wenn die geworfene Exception mit demselben Tag erstellt wurde, andernfalls wird ein TypeError ausgelst. Dies stellt sicher, dass die Ausnahme nur gelesen werden kann, wenn der aufrufende Code Zugriff auf das Tag hat. Tags, die weder in den WebAssembly-Code importiert noch aus diesem exportiert werden, sind intern, und ihre zugehrigen Ausnahmen knnen mit dieser Methode nicht abgefragt werden.
Hinweis: Es reicht nicht aus, dass das Tag eine identische Sequenz von Datentypen hat es muss dieselbe Identitt (dasselbe Tag) haben, das zur Erstellung der Ausnahme verwendet wurde.
Betrachten Sie den folgenden WebAssembly-Code, der angenommen wird, in eine Datei namens example.wasm kompiliert zu sein. Dieser importiert ein Tag, das intern als $tagname bezeichnet wird, und exportiert eine Methode run, die von externem Code aufgerufen werden kann, um eine Ausnahme mit dem Tag zu werfen.
(module
;; import tag that will be referred to here as $tagname
(import "extmod" "exttag" (tag $tagname (param i32)))
;; $throwException function throws i32 param as a $tagname exception
(func $throwException (param i32)
local.get 0
throw $tagname
)
;; Exported function "run" that calls $throwException
(func (export "run")
i32.const 1
call $throwException
)
)
Der untenstehende Code ruft WebAssembly.instantiateStreaming auf, um die Datei example.wasm zu importieren, wobei ein Import-Objekt (importObject) bergeben wird, das ein neues WebAssembly.Tag namens tagToImport enthlt. Das Import-Objekt definiert ein Objekt mit Eigenschaften, die der import-Anweisung im WebAssembly-Code entsprechen.
Sobald die Datei instanziiert ist, ruft der Code die exportierte WebAssembly run() Methode auf, die sofort eine Ausnahme werfen wird.
const tagToImport = new WebAssembly.Tag({ parameters: ["i32"] });
// Note: the import object properties match the import statement in WebAssembly code!
const importObject = {
extmod: {
exttag: tagToImport,
},
};
WebAssembly.instantiateStreaming(fetch("example.wasm"), importObject)
.then((obj) => {
console.log(obj.instance.exports.run());
})
.catch((e) => {
console.error(e);
console.log(`getArg 0 : ${e.getArg(tagToImport, 0)}`);
});
/* Log output
example.js:40 WebAssembly.Exception: wasm exception
example.js:41 getArg 0 : 1
*/
Der Code fngt die Ausnahme ab und verwendet getArg(), um den Wert beim ersten Index zu drucken. In diesem Fall ist der Wert 1.
Der Prozess zur Verwendung eines exportierten Tags ist dem im vorherigen Abschnitt gezeigten sehr hnlich. Hier ist dasselbe WebAssembly-Modul, welches einfach den Import durch einen Export ersetzt.
(module
;; Export tag giving it external name: "exptag"
(tag $tagname (export "exptag") (param i32))
(func $throwException (param i32)
local.get 0
throw $tagname
)
(func (export "run")
i32.const 1
call $throwException
)
)
Auch das JavaScript ist hnlich. In diesem Fall haben wir keine Importe; stattdessen erhalten wir das exportierte Tag und verwenden dieses, um das Argument zu erhalten. Wir testen auch, ob wir das richtige Tag haben, indem wir die is() Methode verwenden.
let tagExportedFromWasm;
WebAssembly.instantiateStreaming(fetch("example.wasm"))
.then((obj) => {
// Import the tag using its name from the WebAssembly module
tagExportedFromWasm = obj.instance.exports.exptag;
console.log(obj.instance.exports.run());
})
.catch((e) => {
console.error(e);
// If the tag is correct, get the value
if (e.is(tagExportedFromWasm)) {
console.log(`getArg 0 : ${e.getArg(tagExportedFromWasm, 0)}`);
}
});
| Spezifikation |
|---|
| WebAssembly JavaScript Interface: Exception Handling # dom-exception-getarg |
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |