每日一题
请封装一个请求函数,要求最多自动重试n次后,任意一次请求成功后就直接返回结果
- 简洁版
async function requestWithRetry(url, maxRetries) {
let retries = 0;
let lastError = null;
while (retries < maxRetries) {
try {
const response = await fetch(url);
const data = await response.json();
return data;
} catch (error) {
lastError = error;
retries++;
}
}
throw lastError;
}
保证一些健壮性,咋们做一些补充能力。
- 以下是一个简单的 JavaScript 请求函数,它具有自动重试的功能。函数使用
fetch
API,你可以根据需要替换成其他的请求库。
async function retryableFetch(url, maxRetries = 3) {
let retries = 0;
while (retries < maxRetries) {
try {
const response = await fetch(url);
if (response.ok) {
return response.json(); // 返回 JSON 数据,你可以根据需要调整
}
} catch (error) {
console.error(`Request failed, retrying (${retries + 1}/${maxRetries})`, error);
}
retries++;
}
throw new Error(`Failed to fetch after ${maxRetries} retries`);
}
// 使用示例
const url = 'https://jsonplaceholder.typicode.com/todos/1';
retryableFetch(url)
.then(data => console.log(data))
.catch(error => console.error(error));
这个函数会在请求失败时进行重试,最多重试 maxRetries
次。如果请求成功,它会解析 JSON 数据并返回,否则在达到最大重试次数后抛出一个错误。
请注意,这只是一个基本的示例,实际场景中你可能需要根据你的需求进行更多的定制。此外,还要考虑一些边缘情况,比如请求超时、网络错误等。