異步語言中的錯誤處理,須要使用一些獨特的,很是規的方式。 下邊是Node.js中幾種主要的錯誤處理模式。讓咱們來看一下。node
先來熟悉一下Error對象。dom
Error對象能夠是Error類的一個實例,或者擴展繼承Error類的自定義Error類:異步
若是在程序執行期間拋出未捕獲的異常,程序將崩潰。async
要解決此問題,須要在 process 對象上偵聽 uncaughtException 事件:函數
最簡單的模式,不能處理異步狀況。以下:spa
這是一個經常使用的模式,函數執行時,若是出現錯誤狀況,它會直接拋出一個錯誤。錯誤異常須要在catch中捕捉並處理。在try / catch中沒法處理異步方法調用拋出的錯誤。要解決這個問題,咱們須要使用domains。在node v0.8+版本的時候,發佈了一個模塊domain。這個模塊作的就是try...catch所沒法作到的:捕捉異步回調中出現的異常。3d
Domain示例:對象
其中 run() 至關於 try, on('error') 至關於 catchblog
經過回調返回錯誤是Node.js中最多見的錯誤處理模式。處理錯誤回調可能變得一團糟(回調地獄金字塔)。繼承
當發出錯誤時,錯誤被廣播給全部相關的訂閱者,按照訂閱順序,間隔執行。
Promise用於異步錯誤處理。以下:
ES7 Async / await可以讓咱們編寫看起來是同步的,異步JS代碼。
不使用try-catch塊的async / await。以下:
以上幾種方式,基本包含了從早期到如今的全部錯誤處理方案。Aysnc/await語法更加直觀,簡潔,以及編寫同步代碼的體驗。不一樣環境下,使用最合適的方案,就是最好的。