// Exemplo de pseudo-código de backoff exponencial com jitter
function fetchWithBackoff(url, maxRetries = 5) {
let retries = 0;
while (retries < maxRetries) {
try {
const response = await fetch(url);
if (response.status !== 429) {
return response; // Sucesso ou erro diferente
}
// Calcule o tempo de backoff com jitter
const baseWaitTime = Math.pow(2, retries) * 1000; // 1s, 2s, 4s, 8s, 16s
const jitter = Math.random() * 0.5 * baseWaitTime;
const waitTime = baseWaitTime + jitter;
console.log(`Limitação de taxa atingida. Aguardando ${waitTime/1000} segundos antes da tentativa ${retries + 1}/${maxRetries}`);
await sleep(waitTime);
retries++;
} catch (error) {
// Trate outros erros
throw error;
}
}
throw new Error("Número máximo de tentativas atingido");
}