Promise的UnhandledPromiseRejectionWarning问题

在封装Nodejs对MySQL的CRUD API的时候遇到了UnhandledPromiseRejectionWarning提示,查询了解到这是Node.js 6.6.0中增加的一个特性:对 Promise 中未处理的 rejection 默认会输出 UnhandledPromiseRejectionWarning 提示。

先看看我原来的code:

new Promise((resolve, reject)=>{
	if(2>1) reject('foo')
	resolve('bar')
})

也就是说,如果你定义的Promise没有进行Catch处理Rejection这种情况,就会有这个提示,解决方法有几个:

  1. 直接用resolve来返回错误代码而不用reject

    反正最后promise都要返回点什么,用reject还是resolve有什么区别呢,我只要在用的时候根据返回的对象去主动判断这个promise是否是成功的也能达到一样的效果。

    new Promise((resolve, reject)=>{
    	if(2>1) resolve({status: 0, msg: "foo"})
    	resolve({status: 1, msg: "bar"})
    })
    
  2. 直接在Promise里用空函数处理

    new Promise((resolve, reject)=>{
        if(2>1) reject("foo")
        resolve("bar")
    }).catch(()=>{})
    
  3. 用node process的全局unhandledRejection事件来处理

    process.on('unhandledRejection', error => {
     console.log('我帮你处理了', error.message);
    });
    
    new Promise((resolve, reject)=>{
       if(2>1) reject("foo")
       resolve("bar")
    })
    

    注意,这种情况下,全局的unhandledRejection事件会优先处理这个错误,也就是像第二种在Promise里用Catch处理是不会生效的。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值