面试题答案
一键面试- 后续
then
方法中的回调函数情况:- 在 Promise 链式调用中,如果其中一个 Promise 状态转换为
rejected
,后续then
方法中作为第一个参数的成功回调函数不会执行。但是then
方法中作为第二个参数的错误回调函数或者.catch
方法中的回调函数会被执行。
- 在 Promise 链式调用中,如果其中一个 Promise 状态转换为
- 统一处理错误方式及代码示例:
- 可以使用
.catch
方法在整个链式调用的末尾统一处理错误。以下是代码示例:
- 可以使用
function resolveAfter2Seconds() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('resolved');
}, 2000);
});
}
function rejectAfter2Seconds() {
return new Promise((_, reject) => {
setTimeout(() => {
reject('rejected');
}, 2000);
});
}
resolveAfter2Seconds()
.then((result) => {
console.log(result);
return rejectAfter2Seconds();
})
.then((result) => {
console.log(result); // 不会执行
})
.catch((error) => {
console.error('统一处理错误:', error);
});
在上述代码中,resolveAfter2Seconds
先被执行并成功,接着返回 rejectAfter2Seconds
这个会被拒绝的 Promise,此时第二个 then
中的成功回调不会执行,而 .catch
中的回调会捕获到错误并打印。