曾经的承诺reject()
回调被调用,警告消息“未被捕获(承诺)”显示在 Chrome 控制台中。然而我有一个catch
处理程序就位。我无法理解其背后的原因,也不知道如何摆脱它。
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))
Warning:
Edit:
我发现如果onRejected
处理程序没有明确提供给.then(onResolved, onRejected)
方法,JS会自动提供一个隐式的方法。它看起来像这样:(err) => throw err
。自动生成的处理程序将依次抛出。
参考:
如果是可调用的(被拒绝时)` is false, then
让被拒绝时 be "Thrower".
http://www.ecma-international.org/ecma-262/6.0/index.html#sec-performpromisethen
发生这种情况是因为您没有将 catch 处理程序附加到第一个返回的 Promisethen
方法,因此当承诺拒绝时没有处理程序。你do有一个承诺p
在最后一行,但不是chained承诺,由then
方法,在它之前的行中。
正如您在下面的注释中正确添加的那样,当未提供 catch 处理程序(或者它不是函数)时,默认情况下会抛出错误。在承诺链中,可以使用以下命令捕获此错误catch
方法回调,但如果不存在,JavaScript 引擎将像处理任何其他未捕获的错误一样处理该错误,并在这种情况下应用默认处理程序,这会导致您在控制台中看到的输出。
为了避免这种情况,请链接.catch
第一个返回的承诺的方法then
, 像这样:
p.then( result => console.log('Fulfilled'))
.catch( error => console.log(error) );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)