throw和console.log的区别在于catch中的promises

时间:2017-04-06 09:33:15

标签: node.js ecmascript-6

我无法理解为什么在throw中使用.catch给我"Unhandled promise rejection"。如果我只是console.log错误,那么每一件事都应该如此运作。

  

" throw ...在当前代码块中引发异常并导致它   退出,或者如果在try块中引发则流向下一个catch语句。

     

console.error只是向浏览器开发人员输出一条红色消息   工具javascript控制台并不会导致任何更改   执行流程。"

https://stackoverflow.com/a/25377160/7825826

似乎throw是处理它的正确方法?但为什么我会收到错误?

例如(如果我没有在1330上运行任何数据库):

mongoose.connect('mongodb://localhost:1330/db')
    .catch((error) => {
    throw error;
});

给我一​​条关于"未处理的承诺拒绝"的错误消息,但如果我console.log(error),则一切正常。

1 个答案:

答案 0 :(得分:0)

当您在catch回调中重新抛出错误时,结果承诺将被拒绝。如果拒绝未在任何地方处理(通过链中的另一个.catch),那么您将收到“未处理的拒绝”消息。

这相当于同步

try {
    connectToNotExistingDatabase(); // throws exception
} catch(error) {
    throw error;
}

执行时仍然会向其调用者抛出异常。相反,如果你没有重新throw n它(但console.log ged它),它只会返回undefined