2016-09-21 50 views
0

我主要使用nodejs工作(但我通常對javascript很陌生),但更具體地說expressjs。他們明確地建議使用try和catch模式,但我已經看到其他人建議只是首先嚐試和真正的錯誤。是否首先嚐試捕捉模式比錯誤更好?

callback(err, data) { 
if (err) throw err; 
//do something if no error was returned 
} 

,而不是

callback(err, data) { 
    try { 
    //do something 
    } catch(err) { 
    //handle the error 
    } 
} 

哪一個被廣泛認爲是做事的更好的辦法?當談到「做某事的唯一方式」時,Javascript非常含糊。

+3

你的第二個例子並不真正意義。到''callback'被調用時,錯誤已經*已經發生或者沒有發生,'err'是錯誤(如果是)或'null'(如果沒有)。這是因爲大多數Node API調用的異步性質,所以在回調函數上有這個標準合約:第一個arg是一個錯誤(如果有的話),第二個是數據(如果有的話)。 (如果API今天正在設計,它會使用承諾,實際上有橋接庫。) –

+0

嘗試catch無法通過V8進行優化! –

+0

你抓到了被拋出的東西;這裏傳遞了'err':錯誤已經發生。 –

回答

3

有一個重要的區別 - 「錯誤優先」的方法是異步調用,try-catch是同步的。

如果您使用某些外部庫,則由他們決定如何處理錯誤。有時候會有選項(例如查看節點的'fs'模塊 - 同步函數拋出錯誤,它取決於你,異步的返回錯誤)

如果你正在實現自己的函數,錯誤優先「方法看起來更好,只是因爲它適合節點的異步特性。

(另有理由不使用的try-catch - V8優化程序可能無法優化功能,這種結構的好,因爲如果它不存在)

+0

爲什麼錯誤只能用於異步?我正在寫一個同步函數,可以返回一個結果或一個錯誤。有沒有什麼理由不在這種情況下使用錯誤優先? – stone