SuppressedError
SuppressedError 物件表示在處理另一個錯誤時產生的錯誤。它在使用 using 或 await using 進行資源處理時生成。
與 AggregateError 相比,SuppressedError 用於表示一個被另一個錯誤抑制的單個錯誤,而 AggregateError 表示一組不相關的錯誤。然而,一個 SuppressedError 可能包含一個被抑制錯誤的鏈(e.suppressed.suppressed.suppressed...)。它在語義上也與 cause 不同,因為這個錯誤不是由另一個錯誤引起的,而是在處理另一個錯誤時發生的。
SuppressedError 是 Error 的一個子類。
建構函式
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 屬性。
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
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 |
瀏覽器相容性
載入中…