Olá. Está tudo dando certo aqui em termos de busca do cep pela API. Porém quando coloco um numero aleatório (no formato correto), ele demora para dar a resposta. Muito mais do que demora pra fazer a solicitação. O "erro: true" aparece instantaneamente no console, porém a resposta aparece apenas se eu saio do campo, volto ao campo, e saio dele novamente.
Segue o código:
function recuperaCEP (input){
const cep = input.value.replace(/\D/g, '')
const url = `https://viacep.com.br/ws/${cep}/json/` // essa interpolação da variável cep dentro do template literas vai puxar sempre o cpf certo.
const options = {
method: 'GET', // quer dizer que vou puxar informações da API
mode: 'cors',
headers: {
'content-type': 'application/json;charset=utf-8'
}
}
//antes de fazer o fetch em si, precisamos fazer a validação, para nao ficar fazendo requisições a toa
//são colocadas essas negações porque essas condições são os erros, então se estiver "false", é pq está tudo certo e podemos pedir a requisição
if(!input.validity.patternMismatch && !input.validity.valueMissing){
fetch(url, options)
.then(
response => response.json()
).then(
data => {
//vou tratar o erro, se a pessoa colocar um cep no formato correto, porém a requisição não encontrou um match lá na API, e então nos retornou um "erro = true"
console.log(data)
if(data.erro){
input.setCustomValidity('CEP não encontrado, verifique o número.')
return // concluindo o Fetch
}
input.setCustomValidity('') // setCustomValidity com string vazio quer dizer que esta OK!
}
)
}
Desde já, valeu!