当我使用 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(使用前将#替换为@)