如果一个诺言可以被拒绝,那我们应该如何处理它,或者甚至不去履行它?

如果在某些情况下可以拒绝某个承诺,由于这种拒绝,仍然会引发错误。我们应该如何处理它或只是忽略它?

情况1:如果用户可以单击“取消”按钮并且取消了某项操作,并且我们认为这种取消是可以的,那么我们是否可以通过以下方式处理该问题:

p.then(value => {
  // fulfillment handler
},err => {});   // do nothing

p.then((value) => {
  // fulfillment handler
}).catch(err => {});     // do nothing

还是我们可以完全忽略它而不使用拒绝处理程序或catch()?

案例2:如果我们这样做

let p = Promise.reject(1);

然后立即引发异常。甚至没有时间去抓住它。然后我们必须始终使用:

let p = Promise.reject(1).catch(err => {});

?实际上,如果上面的p被打印出来,那是一个已解决的承诺,而没有catch()的那个是被拒绝的承诺,所以我有点困惑。我认为两者都应该处于拒绝状态。

thinkphilo 回答:如果一个诺言可以被拒绝,那我们应该如何处理它,或者甚至不去履行它?

如果您使用承诺拒绝/例外来表示某些内容已被取消,则捕获此错误很有意义。

但是,一条重要的经验法则是,如果捕获到一个错误并且希望引发某个错误(例如,CancellationError),则应在catch子句中确保它特别是该类型的错误。 / p>

否则,您将冒着(空)捕获处理程序抛出某些 other 异常并无声吞噬的风险。

所以我通常希望它看起来像这样:

try {
  await someOperation();
} catch (err) {
  if (!(err instanceof Cancellation)) {
    // Re-throw
    throw err;
  }
  console.log('Operation cancelled');
}
本文链接:https://www.f2er.com/2815513.html

大家都在问