Promise抛出“Unhandled promise rejection”错误的奇怪行为

问题描述 投票:1回答:1

当我使用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),它会抛出异常。对此有何解释?这对我来说真的很奇怪!

javascript node.js promise es6-promise
1个回答
2
投票

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

promise.then(() => console.log('ok'))是一个单独的承诺,没有与catch(...)链接,所以被拒绝的承诺将导致未经处理的拒绝。

如果我在任何其他页面(如stackoverflow.com),它会抛出异常

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

它没有出现在Chrome的某些网站上意味着网站设置了unhandledrejection event处理程序来抑制错误输出。

© www.soinside.com 2019 - 2024. All rights reserved.