Error: cause
cause
是 Error
实例的一个数据属性,它指示错误的具体原始原因。
它用于捕获并重新抛出一个带有更具体或更有用错误消息的错误,以便仍然可以访问原始错误。
值
传递给 Error()
构造函数的 options.cause
参数中的值。它可能不存在。
Error: cause 的属性 |
|
---|---|
可写 | 是 |
可枚举 | 否 |
可配置 | 是 |
描述
cause
的值可以是任何类型。您不应假设您捕获的错误具有一个 Error
作为其 cause
,就像您无法确定在 catch
语句中绑定的变量是否为 Error
一样。“将结构化数据作为错误原因提供”下面的示例显示了一个故意将非错误作为原因提供的案例。
示例
重新抛出带有原因的错误
有时需要捕获错误并使用新消息重新抛出它。在这种情况下,您应该将原始错误传递到新 Error
的构造函数中,如所示。
js
try {
connectToDatabase();
} catch (err) {
throw new Error("Connecting to database failed.", { cause: err });
}
有关更详细的示例,请参阅 Error > 区分类似错误。
将结构化数据作为错误原因提供
为人类编写的错误消息可能不适合机器解析——因为它们可能会被重新措辞或标点符号发生变化,这可能会破坏任何现有的用于解析它们的解析器。因此,当从函数中抛出错误时,作为人类可读错误消息的替代方案,您可以改为将原因作为结构化数据提供,以供机器解析。
js
function makeRSA(p, q) {
if (!Number.isInteger(p) || !Number.isInteger(q)) {
throw new Error("RSA key generation requires integer inputs.", {
cause: { code: "NonInteger", values: [p, q] },
});
}
if (!areCoprime(p, q)) {
throw new Error("RSA key generation requires two co-prime integers.", {
cause: { code: "NonCoprime", values: [p, q] },
});
}
// rsa algorithm…
}
规范
规范 |
---|
ECMAScript 语言规范 # sec-installerrorcause |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。