Promise:then vs then + catch

IT技术 javascript promise
2021-02-24 23:17:54

以下2个代码之间有什么区别吗?

myPromise.then(function() {
    console.log('success');
}).catch(function() {
    console.log('error');
});

myPromise.then(function() {
    console.log('success');
}, function() {
    console.log('error');
});

我知道thencatch返回已解决或拒绝的新Promise,并在回调中返回值。但是我在网上看到了 2 个代码,我很好奇这 2 个代码之间的真正区别。

1个回答

在您当前的代码中,它们的行为相同,因为console.log('success');不会失败。

但是,如果你写这样的东西......

myPromise.then(function() {
   // Some error may happen
   throw('An exception that would be caught');
}).catch(function() {
    console.log('error');
});
// Is the same as this, the errHandle tries to catch any unhandled error
// from previous result.
myPromise.then(func, null).then(null, errHandle);


myPromise.then(function() {
   // Some error may happen
   throw('An unhandled exception.');
}, function() {
    // This won't log the error if it happens in the 
    // some error may happen block.
    console.log('error');
});
// Is the same as this, the errHandle will handle errors from previous result,
// but it won't handle errs in func.
myPromise.then(func, errHandle)

第二种形式不能捕捉到那个错误,而第一种可以。

测试片段:

如果我确实希望我的Promise处理错误而不是传播到其他Promise,在这种情况下,我不应该总是使用 ,.catch因为它会完成错误处理函数所做的所有事情+ 还处理成功时抛出的任何异常?
2021-04-28 23:17:54
所以如果我理解正确,如果我们不使用,.catch我们可能会错过成功处理程序抛出的错误。那么我们不应该总是使用.catch而不是使用标准的 erroHandler 函数,因为.catch它所做的正是该errorHandler函数所做的,只是它做得更多,并且还从成功处理程序中捕获错误?
2021-04-30 23:17:54
JavaScript,你是什么?!
2021-05-10 23:17:54
在这种情况下我会这样做。
2021-05-11 23:17:54
这取决于,如果您不在 中抛出另一个异常.catch,那么Promise将解析为函数.catch返回的内容,有时我们想在其他地方处理异常,例如:let promise2 = getAPromiseThatMayThrow();,那么您可能不想从返回 promise 但在 处捕获它promise2,或者您仍然想捕获它,记录一些内容,然后将其丢弃,或者您使用特定的返回值来指示上promise2一步失败的处理程序,这取决于。
2021-05-13 23:17:54