在封装Nodejs对MySQL的CRUD API的时候遇到了UnhandledPromiseRejectionWarning
提示,查询了解到这是Node.js 6.6.0中增加的一个特性:对 Promise 中未处理的 rejection 默认会输出 UnhandledPromiseRejectionWarning
提示。
先看看我原来的code:
1 | new Promise((resolve, reject)=>{ |
也就是说,如果你定义的Promise没有进行Catch处理Rejection这种情况,就会有这个提示,解决方法有几个:
直接用resolve来返回错误代码而不用reject
反正最后promise都要返回点什么,用reject还是resolve有什么区别呢,我只要在用的时候根据返回的对象去主动判断这个promise是否是成功的也能达到一样的效果。
1
2
3
4new Promise((resolve, reject)=>{
if(2>1) resolve({status: 0, msg: "foo"})
resolve({status: 1, msg: "bar"})
})直接在Promise里用空函数处理
1
2
3
4new Promise((resolve, reject)=>{
if(2>1) reject("foo")
resolve("bar")
}).catch(()=>{})用node process的全局
unhandledRejection
事件来处理1
2
3
4
5
6
7
8process.on('unhandledRejection', error => {
console.log('我帮你处理了', error.message);
});
new Promise((resolve, reject)=>{
if(2>1) reject("foo")
resolve("bar")
})注意,这种情况下,全局的
unhandledRejection
事件会优先处理这个错误,也就是像第二种在Promise里用Catch处理是不会生效的。
本文由adiynil原创编写,转载请尽量保留版权网址,感谢您的理解与分享!