UnhandledPromiseRejectionWarning---不能言喻的痛

不能言喻的痛

1.一直在做公司的后台业务,因为已有的框架已经很完善了,日常的工作就是维护,升级以及业务。但是,每天在运行npm run dev命令的时候,总会有下面这两行提示,因为业务比较忙,而且因为提示的不友好,尝试处理两次失败后,就一直搁置,今天因为对整个代码库整理,决定先对这个错误提示下刀。

UnhandledPromiseRejectionWarning---不能言喻的痛_第1张图片
错误提示

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
});

终于,终于,看到完整的错误提示了,从来没有看到错误这么亲切过。


UnhandledPromiseRejectionWarning---不能言喻的痛_第2张图片
完美

然后就是定位问题了,很简单的,这个y-server包(公司内部维护的)里有个spawn生成的child.stdout为null,导致了错误。修复之,pr。

5.总结:

node 应该是在6版本没有这个问题的,现在我的版本是8.0.0.建议养成习惯,Promise要catch err。

你可能感兴趣的:(UnhandledPromiseRejectionWarning---不能言喻的痛)