如何在javascript中链接异常(即像在java中一样添加原因)

2022-09-01 09:01:14

有没有一种标准/最佳实践方法来添加javascript中异常的原因。在java中,你可以这样做:

Throwable t = new Exception("whatever");
t.addCause(previouslyCaughtException);
throw t;

打印生成的异常时,它会为您提供一个很好的跟踪,其中包括原因。有什么好的方法可以在javascript中做到这一点,还是我必须自己滚动?


答案 1

现在(直到有更好的答案),这就是我所做的:

...
} catch(e) {
  throw new Error("My error message, caused by: "+e.stack+"\n ------The above causes:-----")
}

我打印异常的方式使它看起来漂亮干净:

console.log(e.stack)

打印如下内容:

My error message: SomeError
<some line>
<more lines>
------The above causes:-----
<some line>
<more lines>

如果该行显示“原因”可能会更好,因为首先打印导致错误的异常的堆栈跟踪。


答案 2

如果您使用的是 Node.js则可以使用 VError

Joyent还有一个页面讨论Node中错误处理的最佳实践.js https://www.joyent.com/developers/node/design/errors

唯一的问题是,我不喜欢 Joyent 的 VError 实现在传入 null 或未定义的参数时会失败。当您处理错误时,这一点尤其重要,因为它只会掩盖问题的根本原因。我已经分叉了他们的VError,所以它不会因空或未定义的参数而失败。https://github.com/naddison36/node-verror