【发布时间】:2014-12-25 17:24:45
【问题描述】:
在 JavaScript 中引发异常时,是否有首选方法来包含内部异常?
我对来自 C# 背景的 JavaScript 比较陌生。在 C# 中,您可以执行以下操作:
try
{
// Do stuff
}
catch (Exception ex)
{
throw new Exception("This is a more detailed message.", ex);
}
在我在 JavaScript 中看到的示例中,我无法找到如何在仍然传递原始异常的同时捕获异常、添加新消息以及重新引发新异常。
【问题讨论】:
-
您可以在javascript中定义自己的异常:stackoverflow.com/a/464500/1291428。然后,这个概念在某种程度上是一个全球标准:例外应该适合谁正在使用您的 api。因此,这意味着在必要时捕获它,添加以下信息,记录原始异常等。请参阅 Joshua Bloch,Effective Java 2nd Edition,第 61 条:抛出适合抽象的异常
-
我明白了。我认为可能有一种通常可以处理这种情况的方法,以使 API 的使用者更容易。我可能会在自定义异常中添加一个名为 innerException 的字段。谢谢!
-
throw 显示了一个堆栈,因此您应该能够准确追踪问题所在。也就是说,stack 不是标准属性,尽管它以一些稍微不同的格式被广泛实现。