不能言喻的痛
1.一直在做公司的后臺業(yè)務(wù),因?yàn)橐延械目蚣芤呀?jīng)很完善了,日常的工作就是維護(hù)宽菜,升級以及業(yè)務(wù)。但是竿报,每天在運(yùn)行npm run dev
命令的時(shí)候铅乡,總會有下面這兩行提示,因?yàn)闃I(yè)務(wù)比較忙烈菌,而且因?yàn)樘崾镜牟挥押谜笮遥瑖L試處理兩次失敗后,就一直擱置芽世,今天因?yàn)閷φ麄€(gè)代碼庫整理挚赊,決定先對這個(gè)錯(cuò)誤提示下刀。
錯(cuò)誤提示
2.痛點(diǎn)济瓢。
提示太不友好了荠割,大概的意思就是Promise沒有catch()處理err。在業(yè)務(wù)代碼中全局搜索了一下旺矾,有Promise 63處蔑鹦,都沒有處理catch夺克。手動(dòng)加了一遍,63處還好啦嚎朽。以為解決掉了懊直,現(xiàn)實(shí)是多么的殘酷,還在報(bào)錯(cuò)火鼻。
高歌一曲:日了狗了室囊。問題肯定就是出現(xiàn)在node_modules下的包代碼了,總不能一個(gè)個(gè)去加上catch了吧魁索。
3.google萬能融撞。
google了許久,很多類似的錯(cuò)誤粗蔚,但是沒人解決啊尝偎。
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
});
終于,終于当辐,看到完整的錯(cuò)誤提示了抖僵,從來沒有看到錯(cuò)誤這么親切過。
完美
然后就是定位問題了缘揪,很簡單的耍群,這個(gè)y-server包(公司內(nèi)部維護(hù)的)里有個(gè)spawn生成的child.stdout為null,導(dǎo)致了錯(cuò)誤找筝。修復(fù)之蹈垢,pr。
5.總結(jié):
node 應(yīng)該是在6版本沒有這個(gè)問題的袖裕,現(xiàn)在我的版本是8.0.0.建議養(yǎng)成習(xí)慣曹抬,Promise要catch err。