工作原理
Promise对象的.catch()
方法用于处理Promise链中的错误。当Promise链中的某个Promise对象被拒绝时,控制权会传递到最近的.catch()
方法,以便处理该错误。.catch()
方法返回一个新的Promise对象,因此您可以在后续的.then()
方法中继续链式调用。
.catch()
方法可以捕获来自之前Promise对象的错误,并对这些错误进行处理或传递给下一个.catch()
方法。如果没有显式地使用.catch()
方法来处理错误,错误将被传递到Promise链的下一个可用.catch()
方法,或者如果没有更多的.catch()
方法,则错误将触发全局错误处理程序。
语法
以下是ES6 Promise对象.catch()
方法的基本语法:
promise.catch(onRejected);
promise
:一个Promise对象,用于捕获错误。onRejected
:一个回调函数,用于处理被拒绝的Promise的错误。它接受一个参数,即拒绝原因。
.catch()
方法还可以与.then()
方法一起链式调用,例如:
promise
.then(onFulfilled)
.catch(onRejected);
在这种情况下,.catch()
方法将在前面的.then()
方法中发生任何错误时触发。
示例
让我们通过一些示例来理解ES6 Promise对象的.catch()
方法的使用。
示例1:处理Promise链中的错误
代码语言:javascript复制function asyncOperation() {
return new Promise((resolve, reject) => {
// 执行异步操作
// 如果操作成功,调用resolve并传递结果
// 如果操作失败,调用reject并传递错误信息
reject(new Error('操作失败'));
});
}
asyncOperation()
.then((result) => {
console.log('操作成功:', result);
})
.catch((error) => {
console.error('操作失败:', error);
});
在上面的示例中,我们定义了一个asyncOperation
函数,它返回一个Promise对象。在Promise的执行器函数中,我们使用reject
方法模拟一个操作失败的情况,并传递一个错误信息。
然后,我们通过调用asyncOperation
函数来执行异步操作。使用.then()
方法,我们处理操作成功的情况。使用.catch()
方法,我们捕获并处理操作失败的情况。在本例中,由于操作被拒绝,控制权传递到了.catch()
方法,我们打印出了错误信息。
示例2:链式调用多个.catch()
方法
代码语言:javascript复制function asyncOperation1() {
return new Promise((resolve, reject) => {
resolve('操作1成功');
});
}
function asyncOperation2() {
return new Promise((resolve, reject) => {
reject(new Error('操作2失败'));
});
}
asyncOperation1()
.then((result) => {
console.log('操作1成功:', result);
return asyncOperation2();
})
.catch((error) => {
console.error('操作1或操作2失败:', error);
throw new Error('抛出新错误');
})
.catch((error) => {
console.error('捕获到新错误:', error);
});
在这个示例中,我们定义了两个异步操作函数asyncOperation1
和asyncOperation2
。asyncOperation1
成功地解决了Promise对象,而asyncOperation2
被拒绝了。
我们在.then()
方法中链式调用了两个操作,当第一个操作成功时,我们执行第二个操作。在第一个.catch()
方法中,我们捕获了操作1或操作2失败的错误,并抛出了一个新的错误。
然后,我们在第二个.catch()
方法中捕获了新的错误。在这个示例中,通过使用多个.catch()
方法,我们可以在Promise链中的不同阶段捕获和处理错误。