Node.js錯誤處理模式

異步語言中的錯誤處理,須要使用一些獨特的,很是規的方式。 下邊是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

Promise用於異步錯誤處理。以下:

Try...catch 和 async/await

ES7 Async / await可以讓咱們編寫看起來是同步的,異步JS代碼。

使用Await-to-js 第三方類庫

不使用try-catch塊的async / await。以下:

總結

以上幾種方式,基本包含了從早期到如今的全部錯誤處理方案。Aysnc/await語法更加直觀,簡潔,以及編寫同步代碼的體驗。不一樣環境下,使用最合適的方案,就是最好的。

相關文章
相關標籤/搜索