| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/WebAssembly/Reference/JavaScript_interface/Exception | [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.
* Certaines parties de cette fonctionnalit peuvent bnficier de prise en charge variables.
Un objet WebAssembly.Exception reprsente une exception d'excution leve depuis WebAssembly vers JavaScript ou leve depuis JavaScript vers un gestionnaire d'exception WebAssembly.
Le constructeur prend comme arguments un objet WebAssembly.Tag, un tableau de valeurs et un objet options.
La balise fournie par l'objet WebAssembly.Tag dfinit de faon unique le type d'une exception, en incluant l'ordre de ses arguments et leurs types de donnes. Il est ncessaire d'utiliser la mme balise que celle utilise pour la cration de l'objet Exception afin d'accder aux arguments de l'exception dclenche.
Diffrentes mthodes existent pour tester la correspondance entre une exception et une balise donne, et pour obtenir une valeur particulire par indice (si l'exception correspond la balise indique).
Le code JavaScript ou d'autre code ct client peut uniquement accder aux valeurs des exceptions WebAssembly lorsque la balise associe est partage (on ne peut pas utiliser une autre balise qui ne fait que dfinir les mmes types de donnes). Sans balise correspondante, les exceptions peuvent tre interceptes et rmises, mais elles ne peuvent pas tre inspectes.
Afin que l'mission des exceptions soit plus rapide, les exceptions leves depuis WebAssembly n'incluent gnralement pas la pile d'appels (stack trace). Le code WebAssembly qui doit fournir une pile d'appels doit appeler une fonction JavaScript pour crer l'exception en passant le paramtre options.traceStack=true au constructeur. Une fois l'exception disponible pour le module WebAssembly, il peut y attacher une pile d'appels via la proprit stack puis lever l'exception.
Note : Cette fonctionnalit est disponible via les Web Workers.
WebAssembly.Exception()Cre un nouvel objet WebAssembly.Exception.
Exception.prototype.is()Teste si une exception correspond une balise donne.
Exception.prototype.getArg()Renvoie les champs de donnes d'une exception qui correspond la balise donne.
Exception.prototype.stackRenvoie la pile d'appels de l'exception, ou undefined.
Dans cet exemple, on montre comment dfinir une balise et l'importer dans un module, puis on l'utilise afin de lever une exception intercepte en JavaScript.
Prenons le code WebAssembly suivant et supposons qu'il soit compil dans un fichier nomm exemple.wasm.
$tagname et qui a un unique paramtre de type i32. La balise doit tre passe en utilisant le module extmod et la balise exttag.$throwException lve une exception l'aide du mot-cl throw, en prenant en argument $tagname et le paramtre.run1() qui lve une exception avec la valeur "42".(module
;; on importe la balise qui sera ici dsigne par $tagname
(import "extmod" "exttag" (tag $tagname (param i32)) )
;; la fonction $throwException utilise un paramtre i32 pour l'exception $tagname
(func $throwException (param i32)
local.get 0
throw $tagname
)
;; La fonction exporte "run1" appelle $throwException
(func (export "run1")
i32.const 42
call $throwException
)
)
Le fragment de code qui suit appelle WebAssembly.instantiateStreaming pour importer le fichier exemple.wasm, en lui passant un objet d'import (importObject) qui inclue une nouvelle balise (WebAssembly.Tag) intitule tag_to_import. L'objet d'import dfinit un objet dont les proprits correspondent l'instruction import du code WebAssembly.
Une fois le fichier instanci, le code appelle la mthode WebAssembly exporte run1(), qui lvera immdiatement une exception.
const tag_to_import = new WebAssembly.Tag( { parameters: ['i32']} );
// Note : les proprits de l'objet d'import correspondent l'instruction
// WebAssembly import
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 }`);
// On vrifie qu'on a la bonne balise pour l'exception
// Si c'est le cas, on utilise getArg() afin de l'inspecter
if (e.is(tag_to_import) {
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 : 42
L'exception est intercepte en JavaScript l'aide d'un bloc catch. On peut voir qu'elle est de type WebAssembly.Exception, mais si on ne dispose pas de la bonne balise, on ne pourrait pas en savoir grand-chose de plus.
Ici, nous connaissons la balise et on utilise donc Exception.prototype.is() afin de vrifier que c'est la bonne balise. C'est bien le cas et on appelle Exception.prototype.getArg() qui permet de lire la valeur "42".
| Spcification |
|---|
| WebAssembly JavaScript Interface: Exception Handling # runtime-exceptions |
Cette page a t modifie le 4 sept. 2026 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 |