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 |
浏览器兼容性
加载中…