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
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: unhandledpromiserejectionwarning是一个警告信息,表示在Promise对象中发生了未处理的拒绝(rejection)。这通常是因为在Promise中的异步操作出现了错误,但是没有被正确地处理。为了避免这个警告,我们需要在Promise中正确地处理错误,例如使用catch()方法来捕获错误并进行处理。 ### 回答2: UnhandledPromiseRejectionWarning 是一个警告信息,意味着一个 Promise 对象被丢弃,因为它没有被正确处理。这个警告信息通常出现在 Node.js 的命令行界面或者控制台中,它告诉我们某处代码中可能存在一种错误的情况,需要我们进行修复。 当一个 Promise 对象被创建时,它会在未来某个时间点产生一个值,如果这个值被正确处理,那么 Promise 对象会被标记为已处理。但是如果这个值没有被处理,就会导致这个 Promise 对象变为未处理状态,称为“未处理 Promise”。 未处理 Promise 对象会在后续的事件循环中引发 UnhandledPromiseRejectionWarning 提示信息,这个警告提示信息意味着存在一个未处理的 Promise 对象,如果不及时处理,可能会导致程序崩溃。 通常情况下,当 Promise 被 rejected 时,我们需要确定该 Promise 是否已经被处理。如果没有被处理,我们需要添加一个 catch(或者回调函数)来处理它。当 Promise 被处理时,我们可以通过 .then() 方法或者 .catch() 方法获取该 Promise 的结果。 如果我们确保所有 Promise 都被处理了,并将这些错误处理好,那么我们可以避免这些 UnhandledPromiseRejectionWarning 提示信息的出现,使得我们的代码更加健壮和可靠。 ### 回答3: UnhandledPromiseRejectionWarning是一个Node.js发出的警告,意味着一个Promise在执行时出现了错误但是没有被正确处理。 在JavaScript中,Promise是一种异步编程的技术,我们可以使用Promise来处理异步操作。当我们使用Promise时,通常会使用.then()来处理成功的结果、.catch()来处理异常、.finally()来做一些收尾的工作。但是,当我们在操作一个Promise时,如果Promise的状态变为rejected(被拒绝)且没有正确处理错误,就会出现UnhandledPromiseRejectionWarning错误。 这个警告可能会引发一些问题,比如我们的程序可能会崩溃、卡住或者出现其他的异常,因此,我们必须正确地处理Promise的错误。解决这个问题可以有以下几种方法: 1. 在Promise后面加上.catch()方法,确保Promise已经正确的被拒绝时能捕捉到错误并进行处理。 2. 在异步操作的try...catch块中进行错误处理。 3. 在Promise中尽量避免使用throw方法,而是应该抛出一个新的错误。 如何防止UnhandledPromiseRejectionWarning错误呢?首先要注意代码中是否正确处理了Promise的错误,使用.catch()方法可以避免UnhandledPromiseRejectionWarning错误的出现。其次,还可以使用ESLint等代码质量检查工具,检查是否有未处理的Promise错误。另外,在使用Promise时,建议使用async/await语法糖,可以使代码更加简洁、易读,并且避免了一些Promise问题。最后,要养成良好的开发习惯,及时处理代码中出现的错误,不要让错误激增,影响程序的稳定性和安全性。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值