總結(jié)

2018-02-24 16:16 更新
  • 學(xué)習(xí)了怎么區(qū)分操作失敗,即那些可以被預(yù)測的哪怕在正確的程序里也無法避免的錯誤(例如,無法連接到服務(wù)器);而程序的Bug則是程序員失誤。

  • 操作失敗可以被處理,也應(yīng)當(dāng)被處理。程序員的失誤無法被處理或可靠地恢復(fù)(本不應(yīng)該這么做),嘗試這么做只會讓問題更難調(diào)試。

  • 一個給定的函數(shù),它處理異常的方式要么是同步(用throw方式)要么是異步的(用callback或者EventEmitter),不會兩者兼具。用戶可以在回調(diào)函數(shù)里處理錯誤,也可以使用?try/catch捕獲異常 ,但是不能一起用。實際上,使用throw并且期望調(diào)用者使用?try/catch?是很罕見的,因為 NodeJS 里的同步函數(shù)通常不會產(chǎn)生運行失?。ㄖ饕睦馐穷愃朴?code>JSON.parse的用戶輸入驗證函數(shù))。

  • 在寫新函數(shù)的時候,用文檔清楚地記錄函數(shù)預(yù)期的參數(shù),包括它們的類型、是否有其它約束(例如必須是有效的IP地址),可能會發(fā)生的合理的操作失敗(例如無法解析主機(jī)名,連接服務(wù)器失敗,所有的服務(wù)器端錯誤),錯誤是怎么傳遞給調(diào)用者的(同步,用throw,還是異步,用 callback 和 EventEmitter)。

  • 缺少參數(shù)或者參數(shù)無效是程序員的失誤,一旦發(fā)生總是應(yīng)該拋出異常。函數(shù)的作者認(rèn)為的可接受的參數(shù)可能會有一個灰色地帶,但是如果傳遞的是一個文檔里寫明接收的參數(shù)以外的東西,那就是一個程序員失誤。

  • 傳遞錯誤的時候用標(biāo)準(zhǔn)的 Error 類和它標(biāo)準(zhǔn)的屬性。盡可能把額外的有用信息放在對應(yīng)的屬性里。如果有可能,用約定的屬性名(如下)。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號