如果承诺被拒绝,我不想做任何事情,例如getPromise().then(foo=>{});
。为什么Chrome上出现错误?
(new Promise((resolve, reject)=>{reject()}))
Promise {[[PromiseStatus]]: "rejected", [[PromiseValue]]: undefined}
VM3250:2 Uncaught (in promise) undefined
在Node和Firefox上,可以忽略被拒绝的部分。
答案 0 :(得分:5)
承诺拒绝就像未被捕获的例外。
如果你想忽略异常 - 抓住它,但不要处理,
同样在这里 - 添加.catch
语句,但什么都不做
Promise.reject(new Error('bad..')).catch(e => {})
我不建议,因为承诺拒绝理由,所以你可能想要添加某种处理逻辑
答案 1 :(得分:3)
如果没有promise拒绝处理程序,chrome会抛出拒绝异步的原因而不影响任何JavaScript进程,只是将原因打印到控制台。如果您对此感到恼火,则需要添加处理程序,例如Promise.reject(reason).catch(reason => {})
。
更新:为什么会出错?这可能是因为拒绝通常被视为例外(错误)。
P.S。你的“问题”看起来像是反馈而不是问题。我个人更喜欢将原因视为错误。
答案 2 :(得分:1)
拒绝承诺基本上意味着发生了不好的事情,并且您应该通过调用catch
来处理它。如果您在没有catch
的情况下拒绝承诺,则会抛出异常(更准确地说,是未处理的拒绝)
var a = (new Promise((resolve, reject) => {
reject("my error")
})).catch((err) => {
console.error(err)
})
我猜这是V8的特异性,如果这只发生在Chrome下,但对我来说是有意义的