我在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)
})