推荐答案
Promise 的 catch 方法用于处理 Promise 被拒绝(rejected)的情况。它相当于 .then(null, rejectionHandler) 的语法糖,专门用于捕获 Promise 链中的错误。
somePromise
.then(result => {
// 处理成功的结果
})
.catch(error => {
// 处理错误
});本题详细解读
1. catch 方法的作用
catch 方法用于捕获 Promise 链中的错误。当 Promise 被拒绝时,catch 方法中的回调函数会被调用,并且可以处理错误。
2. catch 方法的语法
catch 方法接收一个回调函数作为参数,该回调函数会接收一个错误对象作为参数。
promise.catch(onRejected);
onRejected:一个函数,当Promise被拒绝时调用,接收一个错误对象作为参数。
3. catch 方法的链式调用
catch 方法可以链式调用,用于处理 Promise 链中任意位置的错误。
// www.javascriptcn.com code example
somePromise
.then(result => {
// 处理成功的结果
return anotherPromise;
})
.then(result => {
// 处理另一个成功的结果
})
.catch(error => {
// 处理链中任意位置的错误
});4. catch 方法的返回值
catch 方法返回一个新的 Promise,这意味着你可以在 catch 之后继续链式调用其他 Promise 方法。
// www.javascriptcn.com code example
somePromise
.then(result => {
// 处理成功的结果
})
.catch(error => {
// 处理错误
return fallbackValue;
})
.then(result => {
// 继续处理结果
});5. catch 方法的错误传播
如果在 catch 方法中没有处理错误,或者 catch 方法本身抛出错误,错误会继续向下传播,直到被下一个 catch 捕获。
// www.javascriptcn.com code example
somePromise
.then(result => {
// 处理成功的结果
})
.catch(error => {
// 处理错误
throw new Error('New error');
})
.catch(error => {
// 捕获上一个 catch 抛出的错误
});6. catch 与 then 的对比
catch 方法是 then 方法的特例,专门用于处理错误。以下两种写法是等价的:
// www.javascriptcn.com code example
// 使用 catch
somePromise
.then(result => {
// 处理成功的结果
})
.catch(error => {
// 处理错误
});
// 使用 then 的第二个参数
somePromise
.then(
result => {
// 处理成功的结果
},
error => {
// 处理错误
}
);7. 使用场景
catch 方法通常用于以下场景:
- 捕获
Promise链中的错误。 - 在错误发生时提供备用值或执行备用逻辑。
- 在错误发生时记录日志或上报错误信息。
// www.javascriptcn.com code example
fetchData()
.then(data => {
// 处理数据
})
.catch(error => {
console.error('Error fetching data:', error);
return getFallbackData();
})
.then(data => {
// 继续处理数据
});