REFACTOR: Aprimorando feature de retry na API do ViaCep
This commit is contained in:
parent
b1593956c7
commit
4442878090
40
app.js
40
app.js
@ -26,26 +26,34 @@ function createApp() {
|
||||
const numero = rawNumero ? String(rawNumero).trim() : "";
|
||||
|
||||
try {
|
||||
const viaCepData = await fetchJson(
|
||||
`https://viacep.com.br/ws/${cep}/json/`
|
||||
);
|
||||
// adicionar retry na consulta api ViaCEP
|
||||
const viaCepUrl = `https://viacep.com.br/ws/${cep}/json/`;
|
||||
let viaCepData = await fetchJson(viaCepUrl);
|
||||
// ViaCEP com retry e backoff (corrige shadowing e trata exceções)
|
||||
|
||||
const maxAttempts = 5;
|
||||
let attempt = 0;
|
||||
let retryDelayMs = 1000; // delay inicial
|
||||
|
||||
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) {
|
||||
viaCepData = await fetchJson(
|
||||
`https://viacep.com.br/ws/${cep}/json/`
|
||||
);
|
||||
if (viaCepData && !viaCepData.erro) break;
|
||||
console.info(`[INFO] Tentativa ${attempt + 1} da API ViaCEP`);
|
||||
try {
|
||||
viaCepData = await fetchJson(viaCepUrl);
|
||||
if (viaCepData && !viaCepData.erro) break;
|
||||
console.info(`[INFO] ViaCEP retornou erro ou vazio na tentativa ${attempt + 1} para CEP ${cep}`);
|
||||
} catch (e) {
|
||||
console.warn(`[WARN] Erro na chamada ViaCEP (tentativa ${attempt + 1}) para ${cep}: ${e && e.message ? e.message : e}`);
|
||||
}
|
||||
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 bairro = viaCepData.bairro || "";
|
||||
|
||||
Loading…
Reference in New Issue
Block a user