Error: cause

causeError 实例的一个数据属性,它指示错误的具体原始原因。

它用于捕获并重新抛出一个带有更具体或更有用错误消息的错误,以便仍然可以访问原始错误。

传递给 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 的浏览器中加载。

另请参阅