2014-10-29 98 views
6

在JavaScript中抛出异常时,是否有一种首选的方法来包含内部异常?JavaScript中的内部错误(例外)

我对来自C#背景的JavaScript比较陌生。在C#中,你可以做到以下几点:

try 
{ 
    // Do stuff 
} 
catch (Exception ex) 
{ 
    throw new Exception("This is a more detailed message.", ex); 
} 

在我见过的在JavaScript中我一直没能找到如何捕捉异常,添加一个新的消息和样本重新抛出,而新的异常仍然通过最初的例外。

+2

您可以定义在javascript自己的异常:http://stackoverflow.com/a/464500/1291428。然后,这个概念在某种程度上是一个全球性的标准:异常应该适合谁在使用你的api。所以,它意味着必要时捕获它,添加以下信息,记录原始异常等。请参阅Joshua Bloch,Effective Java第2版,第61项:抛出与抽象相关的异常 – Sebas 2014-10-29 20:28:01

+0

我明白了。我认为可能有一种方法通常是为了方便API的消费者而进行处理。我可能只是将一个名为innerException的字段添加到自定义异常中。谢谢! – burnttoast11 2014-10-29 20:33:24

+0

抛出显示堆栈,所以你应该能够确切地追踪问题所在。那就是说,堆栈不是一个标准属性,尽管它有一些稍微不同的格式,被广泛使用。 – dandavis 2014-10-29 20:48:13

回答

4

你可以抛出任何你想要的对象:

try { 
    var x = 1/0; 
} 
catch (e) { 
    throw new MyException("There is no joy in Mudville", e); 
} 

function MyException(text, internal_exception) { 
    this.text = text; 
    this.internal_exception = internal_exception; 
} 

然后将错误与性能textinternal_exception抛出MyException类型。

0

您可以使用:throw message;throw new Error([message[, fileName[, lineNumber]]]);

对于为例:

try 
{ 
    throw new Error('Generic message'); 
} 
catch (ex) 
{ 
    throw "This is a more detailed message." + ex.message; 
} 
+1

抛出非错误对象是一种不好的做法 – 2016-11-22 20:49:48

+1

您失去了innerError的堆栈跟踪 – sparebytes 2017-04-27 14:39:23