SuppressedError

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

SuppressedError 物件表示在處理另一個錯誤時產生的錯誤。它在使用 usingawait using 進行資源處理時生成。

AggregateError 相比,SuppressedError 用於表示一個被另一個錯誤抑制的單個錯誤,而 AggregateError 表示一組不相關的錯誤。然而,一個 SuppressedError 可能包含一個被抑制錯誤的鏈(e.suppressed.suppressed.suppressed...)。它在語義上也與 cause 不同,因為這個錯誤不是由另一個錯誤引起的,而是在處理另一個錯誤時發生的

SuppressedErrorError 的一個子類。

建構函式

SuppressedError()

建立一個新的 SuppressedError 物件。

例項屬性

還繼承了其父級 Error 的例項屬性。.

這些屬性定義在 SuppressedError.prototype 上,並由所有 SuppressedError 例項共享。

SuppressedError.prototype.constructor

建立例項物件的建構函式。對於 SuppressedError 例項,初始值是 SuppressedError 建構函式。

SuppressedError.prototype.name

表示錯誤的型別名稱。對於 SuppressedError.prototype.name,初始值是 "SuppressedError"

注意: SuppressedError 永遠沒有 cause 屬性,因為 cause 的語義與 suppressed 有重疊。

這些屬性是每個 SuppressedError 例項的自有屬性。

error

對導致抑制的錯誤的引用。

suppressed

對被 error 抑制的錯誤的引用。

例項方法

繼承了其父級 Error 的例項方法。.

示例

捕獲 SuppressedError

當在 資源處理 過程中發生錯誤時,會丟擲一個 SuppressedError。丟擲錯誤會觸發作用域清理,清理過程中的每個解構函式都可能丟擲自己的錯誤。所有這些錯誤都會被收集到一個 SuppressedError 例項的鏈中,原始錯誤作為 suppressed 屬性,下一個解構函式丟擲的新錯誤作為 error 屬性。

js
try {
  using resource1 = {
    [Symbol.dispose]() {
      throw new Error("Error while disposing resource1");
    },
  };
  using resource2 = {
    [Symbol.dispose]() {
      throw new Error("Error while disposing resource2");
    },
  };
  throw new Error("Original error");
} catch (e) {
  console.log(e instanceof SuppressedError); // true
  console.log(e.message); // "An error was suppressed during disposal"
  console.log(e.name); // "SuppressedError"
  console.log(e.error); // Error: Error while disposing resource1
  console.log(e.suppressed); // SuppressedError: An error was suppressed during disposal
  console.log(e.suppressed.error); // Error: Error while disposing resource2
  console.log(e.suppressed.suppressed); // Error: Original error
}

鏈條看起來是這樣的

       SuppressedError --suppressed--> SuppressedError --suppressed--> Original error
              |                               |
            error                           error
              v                               v
Error while disposing resource1   Error while disposing resource2
    (Disposal happens later)        (Disposal happens earlier)

建立 SuppressedError

js
try {
  throw new SuppressedError(
    new Error("New error"),
    new Error("Original error"),
    "Hello",
  );
} catch (e) {
  console.log(e instanceof SuppressedError); // true
  console.log(e.message); // "Hello"
  console.log(e.name); // "SuppressedError"
  console.log(e.error); // Error: "New error"
  console.log(e.suppressed); // Error: "Original error"
}

規範

規範
ECMAScript 非同步顯式資源管理
# sec-suppressederror-objects

瀏覽器相容性

另見