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

WebAssembly.Exception.prototype.getArg() - 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.prototype.getArg()

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.

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.

Dans cet article

Syntaxe

js
getArg(exceptionTag, index);

Paramtres

exceptionTag

Un objet WebAssembly.Tag qui doit correspondre la balise associe l'exception. Si les balises ne correspondent pas, une exception TypeError sera leve.

index

L'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.

Valeur de retour

La valeur de l'argument situe la position index.

Exceptions

TypeError

L'exception n'a pas t cre avec la balise passe la mthode.

RangeError

La valeur du paramtre index est suprieure ou gale au nombre de champs de donnes disponibles.

Exemples

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.

Obtenir la valeur d'exception avec une balise importe

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.

wasm
(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.

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

Obtenir la valeur d'exception avec une balise exporte

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.

wasm
(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().

js
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)}`);
    }
  });

Spcifications

Spcification
WebAssembly JavaScript Interface: Exception Handling
# dom-exception-getarg

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page