为什么忽略Chrome上被拒绝的承诺是错误的?

时间:2016-04-09 12:28:45

标签: javascript google-chrome

如果承诺被拒绝,我不想做任何事情,例如getPromise().then(foo=>{});。为什么Chrome上出现错误?

(new Promise((resolve, reject)=>{reject()}))
Promise {[[PromiseStatus]]: "rejected", [[PromiseValue]]: undefined}
VM3250:2 Uncaught (in promise) undefined

在Node和Firefox上,可以忽略被拒绝的部分。

3 个答案:

答案 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下,但对我来说是有意义的