WebAssembly.Tag

Baseline 广泛可用 *

此功能已成熟,并可在许多设备和浏览器版本上使用。自 2022 年 5 月以来,它已在各个浏览器中可用。

* 此特性的某些部分可能存在不同级别的支持。

WebAssembly.Tag 对象定义了可以从 WebAssembly 代码抛出到 WebAssembly 代码的 WebAssembly 异常的类型

创建 WebAssembly.Exception 时,标签定义了异常携带的值的数据类型和顺序。必须使用相同的唯一标签实例来访问异常的值(例如,在使用 Exception.prototype.getArg() 时)。

实例化 Tag 时会创建新的唯一标签。此标签可以作为导入项传递给 WebAssembly 模块,在那里它将成为 WebAssembly 模块标签部分中定义的类型化标签。您也可以导出模块中定义的标签,并使用它来检查从模块抛出的异常。

注意: 您无法访问具有相同参数但却是不同标签的异常的值!这可确保 WebAssembly 模块在需要时可以保持异常信息内部化。代码仍然可以捕获并重新抛出它不理解的异常。

构造函数

WebAssembly.Tag()

创建一个新的 WebAssembly.Tag 对象。

实例方法

Tag.prototype.type()

返回在构造函数中设置的、定义标签数据类型数组的对象。

示例

此代码片段创建了一个新的 Tag 实例。

js
const tagToImport = new WebAssembly.Tag({ parameters: ["i32", "f32"] });

下面的代码片段展示了如何在实例化时使用“导入对象”将其传递给 example.wasm 模块。

js
const importObject = {
  extmod: {
    exttag: tagToImport,
  },
};

WebAssembly.instantiateStreaming(fetch("example.wasm"), importObject).then(
  (obj) => {
    // …
  },
);

WebAssembly 模块随后可以按如下方式导入该标签

wat
(module
  (import "extmod" "exttag" (tag $tagname (param i32 f32))
)

如果该标签用于抛出传播到 JavaScript 的异常,我们可以使用该标签来检查其值。

注意: 有许多替代方法。我们还可以使用该标签创建 WebAssembly.Exception 并从 WebAssembly 调用的函数中抛出它。

规范

规范
WebAssembly JavaScript 接口:异常处理
# tag

浏览器兼容性

另见