面试题答案
一键面试async function fetchData() {
// 模拟异步操作
return new Promise((resolve, reject) => {
setTimeout(() => {
// 这里模拟成功或失败,实际应是真实的服务器请求
Math.random() > 0.5? resolve('data') : reject('error');
}, 1000);
});
}
async function processData() {
const maxRetries = 3;
let retries = 0;
while (retries < maxRetries) {
try {
const data = await fetchData();
// 处理数据
const processedData = data.toUpperCase();
console.log(processedData);
return processedData;
} catch (error) {
retries++;
console.log(`处理失败,重试第 ${retries} 次`);
if (retries === maxRetries) {
console.log('达到最大重试次数,放弃重试');
throw error;
}
await new Promise(resolve => setTimeout(resolve, 1000));
}
}
}
processData().catch(console.error);
try...catch
的作用:
- 捕获异常:在
try
块中执行await fetchData()
和数据处理代码,catch
块捕获在这个过程中抛出的任何错误,这样可以避免错误导致整个程序终止。 - 实现重试逻辑:当捕获到错误时,增加重试次数
retries
,如果未达到最大重试次数,等待1秒后再次尝试执行try
块中的代码,实现重试机制。当达到最大重试次数后,再次抛出错误,以便外层调用代码可以根据需要进行处理。