REFACTOR: Aprimorando feature de retry na API do ViaCep

This commit is contained in:
tulioperdigao 2025-10-23 16:22:32 -03:00
parent b1593956c7
commit 4442878090

40
app.js
View File

@ -26,26 +26,34 @@ function createApp() {
const numero = rawNumero ? String(rawNumero).trim() : ""; const numero = rawNumero ? String(rawNumero).trim() : "";
try { try {
const viaCepData = await fetchJson( const viaCepUrl = `https://viacep.com.br/ws/${cep}/json/`;
`https://viacep.com.br/ws/${cep}/json/` let viaCepData = await fetchJson(viaCepUrl);
); // ViaCEP com retry e backoff (corrige shadowing e trata exceções)
// adicionar retry na consulta api ViaCEP
const maxAttempts = 5;
let attempt = 0;
let retryDelayMs = 1000; // delay inicial
if (!viaCepData || viaCepData.erro) { if (!viaCepData || viaCepData.erro) {
console.info(`[INFO] Primeira tentativa da API ViaCEP falhou para o CEP ${cep}, tentando novamente...`);
let attempt = 0;
const maxAttempts = 5;
let viaCepData = null;
while (attempt < maxAttempts) { while (attempt < maxAttempts) {
viaCepData = await fetchJson( try {
`https://viacep.com.br/ws/${cep}/json/` viaCepData = await fetchJson(viaCepUrl);
); if (viaCepData && !viaCepData.erro) break;
if (viaCepData && !viaCepData.erro) break; console.info(`[INFO] ViaCEP retornou erro ou vazio na tentativa ${attempt + 1} para CEP ${cep}`);
console.info(`[INFO] Tentativa ${attempt + 1} da API ViaCEP`); } catch (e) {
console.warn(`[WARN] Erro na chamada ViaCEP (tentativa ${attempt + 1}) para ${cep}: ${e && e.message ? e.message : e}`);
}
attempt++; attempt++;
console.info(`[INFO] Aguardando ${retryDelayMs}ms antes da próxima tentativa ViaCEP (${attempt}/${maxAttempts})`);
await new Promise((resolve) => setTimeout(resolve, retryDelayMs));
retryDelayMs *= 2;
} }
if (!viaCepData || viaCepData.erro) { }
return res.status(404).json({ error: "CEP não encontrado" });
} if (!viaCepData || viaCepData.erro) {
console.error(`[ERROR] ViaCEP falhou após ${maxAttempts} tentativas para CEP ${cep}`);
return res.status(404).json({ error: "CEP não encontrado" });
} }
const logradouro = viaCepData.logradouro || ""; const logradouro = viaCepData.logradouro || "";
const bairro = viaCepData.bairro || ""; const bairro = viaCepData.bairro || "";