2013-11-03 56 views
0

我是新來的JavaScript,我想知道我應該如何處理錯誤。更確切地說,我應該何時使用異常,返回值,回調或承諾? 我目前正在使用同步函數的返回值和異步函數的回調/承諾,但我不確定這是一個不錯的選擇,因爲我從不使用異常,而且我知道有些人認爲它們非常有用,特別是當一個同步函數可以返回通常的錯誤值(-1和null)作爲正確值時,但實際上,-1和null都是函數的正確結果是非常罕見的。 有人可以告訴我如何選擇正確的解決方案?Javascript:錯誤處理

回答

1

返回值的問題不在於沒有值可供選擇,而是需要手動檢查它們並將它們傳播到堆棧中。

如果通過異常發生錯誤,並且您沒有try-catch任何地方,您將崩潰進程並看到一個不錯的堆棧跟蹤。該錯誤可以是代碼中的錯誤(通常是TypeError和ReferenceError),也可能是文件不存在的預期發生。在後一種情況下,您應該添加try-catch並處理不存在的文件,在前一種情況下,您不應該添加try-catch,而是修復該錯誤。另一方面,如果您忘記檢查錯誤的返回值,那麼程序可能會默默地繼續未定義的狀態或其他比崩潰更糟糕的結果。還有一個事實是,錯誤通常是由於忘記某些東西而引起的,因此需要明確檢查任何地方的返回值都是不好的。

另一個問題是即使您檢查返回值,您可能也不知道該如何處理它,因此您需要手動傳播它,這又需要手動代碼。使用try-catch,try catch現在不需要在那裏,它可以進一步向下處理錯誤(比如在UI中顯示消息「出錯了」)。

如果你想用異步代碼處理錯誤,那麼你應該使用promise。雖然最小的承諾實現仍然無法實現,但它仍然要比處理異常代碼的錯誤處理要早得多,而且回調是荒謬的,不僅需要手動檢查和傳播,還需要2個不同的錯誤處理通道:同步和異步處理。見What are promises and why should I use them?(免責聲明:我是作者)