Promise 抛出“未处理的承诺拒绝”错误的奇怪行为

2024-01-06

当我使用 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 event https://developer.mozilla.org/en-US/docs/Web/Events/unhandledrejection抑制错误输出的处理程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Promise 抛出“未处理的承诺拒绝”错误的奇怪行为 的相关文章

随机推荐