2014-10-29 102 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