【问题标题】:How to properly catch and add information to errors如何正确捕获错误并将信息添加到错误中
【发布时间】:2023-03-31 03:52:02
【问题描述】:

我想向 typescript/javascript 中的错误对象添加信息。我目前是这样做的:

try {
    // code that might throw code
} catch (e) {
    throw new Error(`Error while processing file ${path}:\n${e}`);
}

但这会删除上一个错误中的信息。 Java/PHP 在异常中都有一个 previous 参数,因此我可以包装错误并保留/扩展原始信息,但我似乎无法在 JavaScript 中找到等价物。

我该怎么做?

【问题讨论】:

  • 你试过console.log(new Error().stack)吗?
  • 你可以做let error = new Error(...etc...); error.previous = e; throw error;
  • 扩展 Error 类并根据您的需要生成自定义错误。
  • 这些解决方案是定制的。我正在寻找标准的最佳实践。向错误添加属性不会让 chrome/node/deno 调试工具理解它。
  • 没有内置解决方案developer.mozilla.org/ru/docs/Web/JavaScript/Reference/… 另一个选择是将原始错误的stack 属性复制到新创建的

标签: javascript typescript exception


【解决方案1】:

所以没有标准的方法。

但是,如果您的意图只是在异常消息中添加信息,而不会弄乱错误本身,则可以扩展 message 属性

try {
} catch (e) {
    e.message = `File: ${path}\n${e.message}`;
    throw e;
}

这将保留正确的堆栈跟踪,并在 chrome 或节点控制台上按预期显示。

这里是一个例外示例:

Error: File: 6ff6255b-45b5-4895-8d59-50fa60663cfc.json
JSON Schema: schemas/schema.json
- must NOT have additional properties 
    at JsonFs.validate (driver/json-fs.ts:60:19)
    at JsonFs.readSource (driver/json-fs.ts:39:14)
    at async JsonFs.readSourceFile (driver/abstract-fs.ts:82:30)
    at async driver/abstract-fs.ts:46:34

【讨论】:

    猜你喜欢
    • 2021-07-26
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    相关资源
    最近更新 更多