不管是經過process
對象的uncaughtException
事件捕獲到全局異常,仍是經過子域對象的error
事件捕獲到了子域異常,在NodeJS官方文檔裏都強烈建議處理完異常後當即重啓程序,而不是讓程序繼續運行。按照官方文檔的說法,發生異常後的程序處於一個不肯定的運行狀態,若是不當即退出的話,程序可能會發生嚴重內存泄漏,也可能表現得很奇怪。git
但這裏須要澄清一些事實。JS自己的throw..try..catch
異常處理機制並不會致使內存泄漏,也不會讓程序 的執行結果出乎意料,但NodeJS並非存粹的JS。NodeJS裏大量的API內部是用C/C++實現的,所以NodeJS程序的運行過程當中,代碼執 行路徑穿梭於JS引擎內部和外部,而JS的異常拋出機制可能會打斷正常的代碼執行流程,致使C/C++部分的代碼表現異常,進而致使內存泄漏等問題。github
所以,使用uncaughtException
或domain
捕獲異常,代碼執行路徑裏涉及到了C/C++部分的代碼時,若是不能肯定是否會致使內存泄漏等問題,最好在處理完異常後重啓程序比較穩當。而使用try
語句捕獲異常時通常捕獲到的都是JS自己的異常,不用擔憂上訴問題。dom
咱們經過中間件的形式,引入domain來處理異步中的異常。固然,domain雖然捕捉到了異常,可是仍是因爲異常而致使的堆棧丟失會致使內存泄漏,因此出現這種狀況的時候仍是須要重啓這個進程的,有興趣的同窗能夠去看看domain-middleware這個domain中間件。異步