Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “扔承诺的怪异行为”;未经处理的拒绝承诺”;错误_Javascript_Node.js_Promise_Es6 Promise - Fatal编程技术网

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'))