不能言喻的痛
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。