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

瀏覽器相容性

另見