正如我所看到的,它是經常可以看到這樣一行:節點式回調:完成(異常)還是拋出異常?
if (err) return done(err);
但正如我的理解對不對,我可以這樣做:
if (err) throw err;
這看起來相當與做工不錯。那有什麼區別?
是啊,我知道承諾,我喜歡他們,但仍然,我想知道這個問題的答案。
正如我所看到的,它是經常可以看到這樣一行:節點式回調:完成(異常)還是拋出異常?
if (err) return done(err);
但正如我的理解對不對,我可以這樣做:
if (err) throw err;
這看起來相當與做工不錯。那有什麼區別?
是啊,我知道承諾,我喜歡他們,但仍然,我想知道這個問題的答案。
你可以做
if (err) throw err;
如果錯誤是致命的,你希望你的程序崩潰,因爲沒有辦法趕上這樣的錯誤。如果您編寫庫或服務器應用程序,則應將錯誤傳遞給回調。
由於大多數錯誤是異步的,因此您可能希望使用回調將錯誤傳播回錯誤處理程序。
Try/catch塊很少使用,只適用於可能失敗的少數同步函數,如JSON.parse()
。
真的嗎?我認爲promise會捕獲這些異常,並用catch回調包裝它。這是真的? – dt0xff 2014-09-19 14:24:18
這個問題不是關於承諾,是嗎?在承諾中,您可以安全地引發異常,這是事實,但您不需要重新引發錯誤,因爲它們會自動傳播。 – vkurchatkin 2014-09-19 14:30:48
是的,是有點偏題)所以,沒有承諾,我應該總是@done(err)@如果我想抓住它在上層邏輯和處理它,但它錯誤是致命的,我應該扔它通過電子郵件或自動通知自己? – dt0xff 2014-09-19 14:55:12