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 bénéficier de prise en charge variables.
Un objet WebAssembly.Exception représente une exception d'exécution levée depuis WebAssembly vers JavaScript ou levée 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 définit de façon unique le type d'une exception, en incluant l'ordre de ses arguments et leurs types de données. Il est nécessaire d'utiliser la même balise que celle utilisée pour la création de l'objet Exception afin d'accéder aux arguments de l'exception déclenchée.
Différentes méthodes existent pour tester la correspondance entre une exception et une balise donnée, et pour obtenir une valeur particulière par indice (si l'exception correspond à la balise indiquée).
Le code JavaScript ou d'autre code côté client peut uniquement accéder aux valeurs des exceptions WebAssembly lorsque la balise associée est partagée (on ne peut pas utiliser une autre balise qui ne fait que définir les mêmes types de données). Sans balise correspondante, les exceptions peuvent être interceptées et réémises, mais elles ne peuvent pas être inspectées.
Afin que l'émission des exceptions soit plus rapide, les exceptions levées depuis WebAssembly n'incluent généralement pas la pile d'appels (stack trace). Le code WebAssembly qui doit fournir une pile d'appels doit appeler une fonction JavaScript pour créer l'exception en passant le paramètre options.traceStack=true au constructeur. Une fois l'exception disponible pour le module WebAssembly, il peut y attacher une pile d'appels via la propriété stack puis lever l'exception.
Note : Cette fonctionnalité est disponible via les Web Workers.
Crée un nouvel objet WebAssembly.Exception.
Teste si une exception correspond à une balise donnée.
Exception.prototype.getArg()Renvoie les champs de données d'une exception qui correspond à la balise donnée.
Renvoie la pile d'appels de l'exception, ou undefined.
Dans cet exemple, on montre comment définir une balise et l'importer dans un module, puis on l'utilise afin de lever une exception interceptée en JavaScript.
Prenons le code WebAssembly suivant et supposons qu'il soit compilé dans un fichier nommé exemple.wasm.
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) intitulée tag_to_import. L'objet d'import définit un objet dont les propriétés correspondent à l'instruction import du code WebAssembly.
Une fois le fichier instancié, le code appelle la méthode WebAssembly exportée run1(), qui lèvera immédiatement une exception.
L'exception est interceptée 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 vérifier que c'est la bonne balise. C'est bien le cas et on appelle Exception.prototype.getArg() qui permet de lire la valeur "42".
| WebAssembly JavaScript Interface: Exception Handling # runtime-exceptions |
Activez JavaScript pour afficher ce tableau de compatibilité des navigateurs.
Cette page a été modifiée le 7 sept. 2025 par les contributeur·ice·s du MDN.
Votre modèle pour un internet meilleur.
Visitez la société mère à but non lucratif de Mozilla Corporation, la Fondation Mozilla.
Certaines parties de ce contenu sont protégées par le droit d'auteur ©1998—2026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.