UnhandledPromiseRejectionWarning---不能言喻的痛

不能言喻的痛

1.一直在做公司的后臺業務,因為已有的框架已經很完善了,日常的工作就是維護,升級以及業務。但是,每天在運行npm run dev命令的時候,總會有下面這兩行提示,因為業務比較忙,而且因為提示的不友好,嘗試處理兩次失敗后,就一直擱置,今天因為對整個代碼庫整理,決定先對這個錯誤提示下刀。

錯誤提示

2.痛點。
提示太不友好了,大概的意思就是Promise沒有catch()處理err。在業務代碼中全局搜索了一下,有Promise 63處,都沒有處理catch。手動加了一遍,63處還好啦。以為解決掉了,現實是多么的殘酷,還在報錯。
高歌一曲:日了狗了。問題肯定就是出現在node_modules下的包代碼了,總不能一個個去加上catch了吧。

3.google萬能。
google了許久,很多類似的錯誤,但是沒人解決啊。

4.stackoverflow。
how to find which promises is unhandled in nodejs UnhandledPromiseRejectionWarning?

看到這位仁兄的方案,在入口加了下面這行代碼。

process.on('unhandledRejection', (reason, p) => {
  console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
  // application specific logging, throwing an error, or other logic here
});

終于,終于,看到完整的錯誤提示了,從來沒有看到錯誤這么親切過。


完美

然后就是定位問題了,很簡單的,這個y-server包(公司內部維護的)里有個spawn生成的child.stdout為null,導致了錯誤。修復之,pr。

5.總結:

node 應該是在6版本沒有這個問題的,現在我的版本是8.0.0.建議養成習慣,Promise要catch err。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容