当我使用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处理程序来抑制错误输出。