| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/WebAssembly/Reference/JavaScript_interface/Exception/getArg | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis mai 2022.
La mthode getArg(), rattache au prototype d'un objet Exception, permet d'obtenir la valeur d'un lment spcifique parmi les arguments de donne d'une exception.
Cette mthode prend comme argument une balise WebAssembly.Tag et fonctionnera uniquement si l'exception leve a t cre avec cette mme balise. Dans le cas contraire, la mthode dclenchera une exception TypeError. On s'assure ainsi que l'exception puisse tre lue seulement si le code appelant a accs la balise. Les balies qui ne sont ni importes ni exportes dans/depuis le code WebAssembly sont internes et les exceptions correspondantes ne peuvent pas tre inspectes avec cette mthode !
Note : Avoir la mme squence des mmes types de donnes ne suffit pas. Il faut que la balise ait la mme identit (que ce soit la mme balise) que celle utilise pour crer l'exception.
getArg(exceptionTag, index);
exceptionTagUn objet WebAssembly.Tag qui doit correspondre la balise associe l'exception. Si les balises ne correspondent pas, une exception TypeError sera leve.
indexL'indice de la valeur, parmi les arguments de donnes, renvoyer (l'indexation commence 0). Si l'indice dpasse le nombre d'lments disponibles, la mthode lvera une exception RangeError.
La valeur de l'argument situe la position index.
TypeErrorL'exception n'a pas t cre avec la balise passe la mthode.
RangeErrorLa valeur du paramtre index est suprieure ou gale au nombre de champs de donnes disponibles.
Pour accder aux valeurs de l'exception, la balise doit tre connue du code appelant. Pour cela, il faut qu'elle ait t importe dans ce code ou exporte depuis ce dernier.
Prenons le fragment de code WebAssembly qui suit en supposant qu'il soit compil dans un fichier intitul exemple.wasm. On y importe une balise laquelle on fait rfrence avec $tagname, et on exporte une mthode run1 qui peut tre appele depuis du code externe et qui lve une exception utilisant la balise.
(module
;; On importe la balise laquelle on fera rfrence avec $tagname
(import "extmod" "exttag" (tag $tagname (param i32)) )
;; La fonction $throwException renvoie un paramre i32 et a une balise $tagname
(func $throwException (param i32)
local.get 0
throw $tagname
)
;; La fonction exporte "run1" qui appelle $throwException
(func (export "run1")
i32.const 1
call $throwException
)
)
Le fragment de code JavaScript qui suit appelle WebAssembly.instantiateStreaming afin d'importer le fichier 'exemple.wasm' et lui passe un objet d'import (importObject) contenant une nouvelle balise WebAssembly.Tag intitule tag_to_import. L'objet d'import dfinit un objet dont les proprits correspondent celles de l'instruction import prsente dans le code WebAssembly (un entier i32).
Une fois le fichier instanci, le code invoque la mthode WebAssembly exporte run1(), qui dclenche immdiatement une exception.
const tag_to_import = new WebAssembly.Tag({ parameters: ["i32"] });
// Note : les proprits de l'objet d'import correspondent la
// structure dcrite par l'instruction import dans le code WebAssembly !
const importObject = { extmod: { exttag: tag_to_import } };
WebAssembly.instantiateStreaming(fetch("exemple.wasm"), importObject)
.then((obj) => {
console.log(obj.instance.exports.run1());
})
.catch((e) => {
console.log(`${e}`);
console.log(`getArg 0 : ${e.getArg(tag_to_import, 0)}`);
});
// Affichage dans la console
// exemple.js:40 WebAssembly.Exception: wasm exception
// exemple.js:41 getArg 0 : 1
Le code intercepte l'exception et utilise getArg() afin d'afficher la valeur situe en premire position. Dans ce cas, il s'agit de "1".
Lorsqu'il s'agit plutt d'une balise exporte, le procd est semblable celui de l'exemple prcdent. On a le mme module WebAssembly dans lequel on a juste remplac l'import par un export.
(module
;; On exporte la balise avec le nom externe "exptag"
(tag $tagname (export "exptag") (param i32) )
(func $throwException (param i32)
local.get 0
throw $tagname
)
(func (export "run1")
i32.const 1
call $throwException
)
)
Le code JavaScript est aussi semblable. Dans ce cas, on n'a pas d'import, on rcupre la place la balise exporte et on l'utilise pour obtenir l'argument. Pour assurer l'ensemble, on teste galement qu'il s'agit de la bonne balise en utilisant la mthode is().
let tag_exported_from_wasm;
WebAssembly.instantiateStreaming(fetch("exemple.wasm"))
.then((obj) => {
// On importe la balise avec le nom export depuis WebAssembly
tag_exported_from_wasm = obj.instance.exports.exptag;
console.log(obj.instance.exports.run1());
})
.catch((e) => {
console.log(`${e}`);
// Si la balise correspond, on rcupre la valeur
if (e.is(tag_exported_from_wasm)) {
console.log(`getArg 0 : ${e.getArg(tag_exported_from_wasm, 0)}`);
}
});
| Spcification |
|---|
| WebAssembly JavaScript Interface: Exception Handling # dom-exception-getarg |
Cette page a t modifie le 7 sept. 2025 par les contributeurices du MDN.
Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |