通过封装 fetch 请求并引入重试机制来实现接口请求结果恢复。核心做法是捕获网络异常或 http 错误状态码,在满足重试条件时递归调用自身或使用循环等待,直到达到最大重试次数或成功获取数据。

如何配置基础的重试参数与逻辑
需要定义一个包含最大重试次数、当前重试计数和延迟时间的配置对象,并在请求失败时根据这些参数决定是否继续尝试。

function fetchWithRetry(url, options = {}, retries = 3) {
return fetch(url, options)
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.json();
})
.catch(error => {
if (retries > 0) {
console.log(`Retrying... (${3 - retries} attempts left)`);
return new Promise(resolve => setTimeout(resolve, 1000))
.then(() => fetchWithRetry(url, options, retries - 1));
}
throw error;
});
}
如何处理特定状态码的差异化恢复
针对不同的 HTTP 状态码(如 429 Too Many Requests 或 503 Service Unavailable),可以设置不同的退避策略或跳过某些不可恢复的错误。

async function smartFetch(url, maxRetries = 3) {
let lastError;
for (let attempt = 0; attempt = 500) {
if (attempt setTimeout(r, delay));
continue;
}
}
throw new Error(`Failed with status ${response.status}`);
} catch (error) {
lastError = error;
if (attempt === maxRetries) break;
await new Promise(r => setTimeout(r, 1000));
}
}
throw lastError;
}
基于程序中某个输入、条件或结果的具体问题
当输入 URL 指向一个间歇性不稳定的服务端点且连续三次请求均返回 503 状态码时,程序最终会抛出最后一次捕获的错误,而不是返回任何数据。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











