gpt4 book ai didi

javascript - Promise reject() 导致 "Uncaught (in promise)"警告

转载 作者:IT王子 更新时间:2023-10-29 03:17:31 26 4
gpt4 key购买 nike

一旦调用 promise reject() 回调,Chrome 控制台中就会出现一条警告消息“Uncaught (in promise)”。我无法理解它背后的原因,也不知道如何摆脱它。

var p = new Promise((resolve, reject) => {
setTimeout(() => {
var isItFulfilled = false
isItFulfilled ? resolve('!Resolved') : reject('!Rejected')
}, 1000)
})

p.then(result => console.log(result))
p.catch(error => console.log(error))

警告:

enter image description here

编辑:

我发现如果 onRejected 处理程序没有显式提供给 .then(onResolved, onRejected) 方法,JS 会自动提供一个隐式处理程序。它看起来像这样:(err) => throw err。自动生成的处理程序将依次抛出。

引用:

If IsCallable(onRejected)` is false, then
     Let onRejected be "Thrower".

http://www.ecma-international.org/ecma-262/6.0/index.html#sec-performpromisethen

最佳答案

发生这种情况是因为您没有将捕获处理程序附加到第一个 then 返回的 promise 中方法,因此在 promise 拒绝时没有处理程序。你确实有一个 promise p在最后一行,但不是 chained promise,由 then 返回方法,在它之前的一行中。

正如您在下面的评论中正确添加的那样,当未提供捕获处理程序(或它不是函数)时,default one will throw错误。在 promise 链中,可以使用 catch 捕获此错误。方法回调,但如果不存在,JavaScript 引擎将像处理任何其他 Uncaught Error 一样处理错误,并在这种情况下应用默认处理程序,这会导致您在控制台中看到输出。

为避免这种情况,链接 .catch第一个返回的 promise 的方法 then ,像这样:

p.then( result =>  console.log('Fulfilled'))
.catch( error => console.log(error) );

关于javascript - Promise reject() 导致 "Uncaught (in promise)"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42460039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com