[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/WebAssembly/Reference/JavaScript_interface/Exception [Back]  [Original]

WebAssembly.Exception - WebAssembly | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

WebAssembly.Exception

Baseline
Large disponibilit
*

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.

Dans cet article

Constructeur

WebAssembly.Exception()

Cre un nouvel objet WebAssembly.Exception.

Mthodes des instansces

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.

Proprits des instances

Exception.prototype.stack

Renvoie la pile d'appels de l'exception, ou undefined.

Exemples

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.

  • Le module importe une balise laquelle il est fait rfrence par $tagname et qui a un unique paramtre de type i32. La balise doit tre passe en utilisant le module extmod et la balise exttag.
  • La fonction $throwException lve une exception l'aide du mot-cl throw, en prenant en argument $tagname et le paramtre.
  • Le module exporte la fonction run1() qui lve une exception avec la valeur "42".
wasm
(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.

js
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".

Spcifications

Spcification
WebAssembly JavaScript Interface: Exception Handling
# runtime-exceptions

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page