为什么我们在使用默认定义拒绝时会未捕获(承诺),但不是解决的情况



我在chrome控制台中尝试了这两个代码刺:

此代码片段不会通过任何错误:

let promise = new Promise(function(resolve, reject) {
  resolve ("nicely done!");
}); 

但是这个确实

let promise = new Promise(function(resolve, reject) {
  reject ("Whoops!");
}); 

并说未抓住(承诺(哎呀!

为什么?为什么JS引擎以不同的方式处理拒绝和解析的定义?

被拒绝的承诺表示导致错误的失败操作:拒绝承诺的值,在您的情况下"Whoops" 。不使用.then(_, onReject).catch(onReject)try { await promise; }来处理此承诺基本上意味着您忽略了一个错误,就像您对同步错误所做的那样。

因此,平台必须有某种方式告诉开发人员出了问题,在节点中这将终止进程(尽管它会在process上触发事件,以便您可以在那里处理它作为最后的手段(。有关节点平台处理此问题的方式的更多信息,请参阅 https://nodejs.org/api/process.html#process_event_unhandledrejection。

当然,在浏览器中终止该过程意味着关闭选项卡或其他内容,因此您只会在控制台中收到错误。

拒绝任何有错误或没有错误的东西后,您应该使用 .catch 来处理错误。它应该像风箱

let promise = new Promise(function(resolve, reject) {
  reject ("Whoops!");
});
.catch((errors) => {
   console.log(errors)
})

最新更新