面试题答案
一键面试优化策略
- 集中异常处理:在合适的层级统一捕获异常,避免每个
await
都单独处理,减少重复代码和性能开销。 - 设置重试机制:为频繁出错的任务设置合理的重试次数,避免无限制重试浪费资源。
- 错误分类处理:根据异常类型进行不同处理,对可恢复的异常进行重试,对不可恢复的异常直接处理。
- 资源分配优化:在重试过程中合理分配资源,比如限制重试频率,避免短时间内消耗过多资源。
代码示例
// 模拟一个异步任务
async function asyncTask() {
// 模拟50%概率抛出异常
if (Math.random() > 0.5) {
throw new Error('任务出错');
}
return '任务成功';
}
// 集中异常处理和重试机制
async function runWithRetry(task, maxRetries = 3, retryInterval = 1000) {
let retries = 0;
while (retries < maxRetries) {
try {
return await task();
} catch (error) {
retries++;
if (retries >= maxRetries) {
throw error;
}
console.log(`捕获异常,重试第 ${retries} 次,等待 ${retryInterval} 毫秒...`);
await new Promise(resolve => setTimeout(resolve, retryInterval));
}
}
}
// 执行任务
runWithRetry(asyncTask).then(result => {
console.log(result);
}).catch(error => {
console.error('最终失败:', error);
});
在上述代码中,asyncTask
模拟一个可能抛出异常的异步任务。runWithRetry
函数实现了集中异常处理和重试机制,设置了最大重试次数 maxRetries
和重试间隔 retryInterval
,通过 while
循环和 try - catch
块来捕获异常并进行重试,同时在每次重试前等待一定时间,避免短时间内过度重试消耗资源。