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