Promise的怪异行为引发“未处理的承诺拒绝”错误

惠美

当我使用Node运行此代码时,它会Unhandled promise rejection在控制台中引发错误(甚至error caught首先显示文本)。

const promise = new Promise((resolve, reject) => setTimeout(reject, 1000))
promise.then(() => console.log('ok'))
promise.catch((e) => console.log('error caught'))

但是,当我将catch方法链接到then方法时,错误消失了:

const promise = new Promise((resolve, reject) => setTimeout(reject, 1000))
promise.then(() => console.log('ok')).catch((e) => console.log('error caught'))

难道第一个代码不应该处理拒绝吗?

我还尝试了Chrome中的第一个代码,当我在新标签页(或google.com)中打开检查器时,该代码就可以使用。如果我在其他任何页面(例如stackoverflow.com)中,则会引发异常。有什么解释吗?这对我来说真的很奇怪!

那将是烧瓶

为了被视为已处理,被拒绝的诺言应与then(..., ...)(2个参数)或同步链接catch(...)

promise.then(() => console.log('ok'))是未与链接的单独承诺catch(...),因此被拒绝的承诺将导致未处理的拒绝。

如果我在其他任何页面(例如stackoverflow.com)中,则会引发异常

这不是一个例外,它不会阻止脚本正常运行。处理未处理的拒绝的方式取决于Promise实现。Chrome实施Uncaught (in promise)默认会导致控制台错误。

如果它没有出现在Chrome的某些网站中,则意味着网站设置了unhandledrejection事件处理程序来抑制错误输出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

开玩笑的mockRejectedValue在节点中引发未处理的承诺拒绝

Angular2未处理的承诺拒绝:模板解析错误:

错误:AngularJS 2中未处理的Promise拒绝

防止“未处理的承诺被拒绝”错误

UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):错误:生成EACCES Ionic 3

我现在可以得到未来未处理的承诺拒绝行为吗?

反应本机中未处理的承诺拒绝错误?

调试未处理的承诺拒绝

未处理的承诺拒绝警告测试承诺拒绝

量角器异步/等待错误:未处理的承诺拒绝

无法在ApolloServer中引发错误,在捕获Cognito错误时未处理的承诺被拒绝

可能的未处理的承诺拒绝(id:0):错误:“ getLoginData”是只读的

错误:UnhandledPromiseRejection警告:未处理的承诺被拒绝

未处理的承诺拒绝:语法错误

如何异步处理未处理的承诺拒绝?

未处理的承诺拒绝AVA

car :: bcPower中的怪异行为(错误?)

angular 2未处理的承诺拒绝TypeError

未处理的承诺拒绝:模板解析错误:

未处理的承诺拒绝:模板解析错误:Angular - Meteor

节点。未处理的承诺拒绝

错误:未捕获(承诺中):未处理的承诺拒绝

未处理的拒绝错误 - 为什么?// Promise 链设计决策?

无法解决错误未处理的承诺拒绝和 NoSuchSessionError

未处理的承诺拒绝导致加载错误

未处理的承诺拒绝 nodejs

猫鼬:未处理的承诺拒绝

未处理的承诺拒绝警告错误

收到“未处理的承诺拒绝”错误