面试题答案
一键面试- 处理某个 Promise 失败且保证其他成功 Promise 继续执行后续逻辑
- 可以通过在每个 Promise 内部使用
try - catch
来捕获单个 Promise 执行过程中的错误,这样即使某个 Promise 失败,也不会影响Promise.all
中其他 Promise 的执行。 - 示例代码如下:
- 可以通过在每个 Promise 内部使用
const promise1 = new Promise((resolve) => {
setTimeout(() => {
resolve('Promise 1 resolved');
}, 1000);
});
const promise2 = new Promise((_, reject) => {
setTimeout(() => {
reject(new Error('Promise 2 rejected'));
}, 1500);
});
const promise3 = new Promise((resolve) => {
setTimeout(() => {
resolve('Promise 3 resolved');
}, 2000);
});
Promise.all([
promise1.then(result => {
console.log(result);
return result;
}).catch(error => {
console.error('Promise 1 error:', error);
}),
promise2.then(result => {
console.log(result);
return result;
}).catch(error => {
console.error('Promise 2 error:', error);
}),
promise3.then(result => {
console.log(result);
return result;
}).catch(error => {
console.error('Promise 3 error:', error);
})
]).then(() => {
console.log('All promises (or their error - handling) have completed');
});
- 错误边界的设置与统一处理
- 设置错误边界:
- 在上述示例中,
catch
块就是针对每个 Promise 的错误边界,它捕获了单个 Promise 执行过程中抛出的错误,防止错误向上传递影响其他 Promise。
- 在上述示例中,
- 统一处理:
- 可以将所有
catch
块中的错误收集到一个数组或者使用一个集中的错误处理函数。例如,我们可以定义一个全局的错误处理函数:
- 可以将所有
- 设置错误边界:
function handleError(error) {
// 可以在这里进行日志记录等统一操作
console.error('Global error handling:', error);
}
const promise1 = new Promise((resolve) => {
setTimeout(() => {
resolve('Promise 1 resolved');
}, 1000);
});
const promise2 = new Promise((_, reject) => {
setTimeout(() => {
reject(new Error('Promise 2 rejected'));
}, 1500);
});
const promise3 = new Promise((resolve) => {
setTimeout(() => {
resolve('Promise 3 resolved');
}, 2000);
});
Promise.all([
promise1.then(result => {
console.log(result);
return result;
}).catch(error => {
handleError(error);
}),
promise2.then(result => {
console.log(result);
return result;
}).catch(error => {
handleError(error);
}),
promise3.then(result => {
console.log(result);
return result;
}).catch(error => {
handleError(error);
})
]).then(() => {
console.log('All promises (or their error - handling) have completed');
});
这样就实现了在多个 Promise 并发执行时,对单个 Promise 失败的优雅处理以及错误的统一处理。