| [ 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 Methode getArg() des Objekts Exception kann verwendet werden, um den Wert eines angegebenen Elements in den Datenargumenten der Exception abzurufen.
getArg(exceptionTag, index)
exceptionTagEin WebAssembly.Tag, der mit dem dieser Exception zugeordneten Tag bereinstimmen muss.
indexDer Index des Werts in den Datenargumenten, der zurckgegeben werden soll.
Der Wert des Arguments bei index.
TypeErrorDie Tags stimmen nicht berein; die Exception wurde nicht mit dem an die Methode bergebenen Tag erstellt.
RangeErrorDer Wert des Parameters index ist grer oder gleich der Anzahl der Felder in den Daten.
Die Methode getArg() akzeptiert einen WebAssembly.Tag als Parameter und ist nur erfolgreich, wenn die ausgelste Exception mit demselben Tag erstellt wurde. Andernfalls wird ein TypeError ausgelst.
Dadurch wird sichergestellt, dass die Exception nur gelesen werden kann, wenn der aufrufende Code Zugriff auf das Tag hat.
Tags, die weder in den WebAssembly-Code importiert noch aus ihm exportiert werden, sind intern, und ihre zugeordneten Exceptions 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 haben (dasselbe Tag sein), die zum Erstellen der Exception verwendet wurde.
Betrachten Sie den folgenden WebAssembly-Code, der vermutlich in eine Datei namens example.wasm kompiliert wird.
Dieser importiert ein Tag, auf das er intern als $tagname verweist, und exportiert eine Methode run, die von externem Code aufgerufen werden kann, um mit dem Tag eine Exception auszulsen.
(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 folgende Code ruft WebAssembly.instantiateStreaming auf, um die Datei example.wasm zu importieren. Dabei wird ein Importobjekt (importObject) bergeben, das einen neuen WebAssembly.Tag namens tagToImport enthlt.
Das Importobjekt definiert ein Objekt mit Eigenschaften, die mit der import-Anweisung im WebAssembly-Code bereinstimmen.
Sobald die Datei instanziiert wurde, ruft der Code die exportierte WebAssembly-Methode run() auf, die sofort eine Exception auslst.
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 Exception ab und verwendet getArg(), um den Wert am ersten Index auszugeben.
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, bei dem lediglich der Import durch einen Export ersetzt wurde.
(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 gibt es keine Importe; stattdessen wird das exportierte Tag abgerufen und verwendet, um das Argument zu erhalten.
Auerdem wird mit der is()-Methode getestet, ob es das richtige Tag ist.
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 |