【发布时间】:2017-02-25 18:35:33
【问题描述】:
一旦调用了 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))
警告:
编辑:
我发现如果onRejected处理程序没有显式提供给.then(onResolved, onRejected)方法,JS会自动提供一个隐式处理。它看起来像这样:(err) => throw err。自动生成的处理程序将轮流抛出。
参考:
如果 IsCallable(onRejected)` 为 false,则
让 onRejected 为“Thrower”。
http://www.ecma-international.org/ecma-262/6.0/index.html#sec-performpromisethen
【问题讨论】:
-
看来您正在使用 Angular 的
ZoneAwarePromise。他们错误地实施了拒绝处理,至少在特定版本中是这样。 但请记住,从 Fulfillment Handler(然后是 arguments[0])返回的 anything 将更改方法链接的结果,以便下一个then调用来自一个新的 Promise 并返回作为[潜在]状态的值.
标签: javascript promise es6-promise catch-block