Javascript “扔承诺的怪异行为”;未经处理的拒绝承诺”;错误
当我使用节点运行此代码时,它在控制台中抛出一个Javascript “扔承诺的怪异行为”;未经处理的拒绝承诺”;错误,javascript,node.js,promise,es6-promise,Javascript,Node.js,Promise,Es6 Promise,当我使用节点运行此代码时,它在控制台中抛出一个未处理的承诺拒绝错误(甚至首先显示捕获的错误文本) 然而,当我将catch方法链接到then方法时,错误消失: const promise = new Promise((resolve, reject) => setTimeout(reject, 1000)) promise.then(() => console.log('ok')).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)中打开inspector,它就会起作用。如果我在任何其他页面(比如stackoverflow.com),它会抛出异常。对此有何解释?这对我来说真的很奇怪 为了被视为已处理,拒绝的承诺应与
同步链接,然后(…,…)
(2个参数)或捕获(…)
promise.then(()=>console.log('ok'))
是一个单独的承诺,它没有与catch(…)
链接,因此被拒绝的承诺将导致未经处理的拒绝
如果我在任何其他页面(比如stackoverflow.com),它会抛出异常
这不是例外,它不会阻止脚本正常运行。处理未处理拒绝的方式取决于Promise
实施。默认情况下,Chrome实现会导致未捕获(承诺)
控制台错误
在Chrome浏览器中,它没有出现在某些网站上,这意味着网站设置了抑制错误输出的处理程序。首先,
.then()
和.catch()
都创建了一个承诺。只有其中一人被拒绝。
const promise = new Promise((resolve, reject) => setTimeout(reject, 1000))
promise.then(() => console.log('ok')).catch((e) => console.log('error caught'))