erro é algum tipo de paramêtro ?? pois tentei fazer do meu jeito e so retorna um valor quando ultilizo o (erro)!
erro é algum tipo de paramêtro ?? pois tentei fazer do meu jeito e so retorna um valor quando ultilizo o (erro)!
Depende do jeito que você está fazendo Gabriel. Manda aqui depois pra ver o que você fez. Bora tentar entender o código que a Instrutora fez:
var consultaCep = fetch('https://viacep.com.br/ws/01001000/json/')
.then(resposta => resposta.json())
.then(r => {
if (r.erro) {
throw Error('Esse cep não existe')
}
else {
console.log(r)
}
})
.catch(erro => console.log(erro));
Primeiro bora entender o que cada método tá retornando: o fetch nos retorna um objeto do tipo promise, esse objeto possui o método then. Esse método possui seus parâmetros, que são ponteiros de funções para resolve e reject. O parâmetro "resposta" será passado em nossa arrow function para a resolve e não estamos usando o reject. Vamos com calma até aqui. A maior dúvida até aqui deve ser de onde surge esse parâmetro "Resposta"? "Resposta" é um parâmetro que nós criamos, mas o seu conteúdo veio do then. Segundo o site developer.mozilla.org
Uma Função chamada de forma assíncrona se a Promessa for cumprida. Essa função possui um parâmetro, o valor de cumprimento. Se não for uma função, ela é substituída internamente por uma função de identidade ((x) => x) que simplesmente passa o valor de cumprimento adiante.
Posso estar equivocado aqui, mas ao que tudo indica, o valor de cumprimento é justamente nossa "Resposta", é o que foi obtido com a promise.
Então, em seguida pegamos nossa resposta e utilizamos o método .json() para obter novamente uma promise. Dessa vez ela nos retorna um objeto diferente. Esse objeto não possui a propriedade erro, somente quando realmente ocorre um erro que essa propriedade surge no objeto da resposta.
Beleza, então se não for erro, a propriedade r.erro não existe, e eu não entro no if, agora se for, eu subo ele com o throw, e a minha função catch irá tratar ele, ou seja, beleza deu erro, mas o que fazer com esse erro? Nesse caso, printar uma mensagem no console.
Espero que tenha ajudado a esclarecer, recomendo dar uma lida nesses sites. Caso ainda tenha alguma dúvida manda ai o código que você fez e a gente tenta entender o que deu errado.
fontes: https://www.geeksforgeeks.org/javascript-fetch-method/ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then https://developer.mozilla.org/en-US/docs/Web/API/Response/json
O meu código está idêntico ao da aula, e o termo 'erro' de dentro do if não é reconhecido, esta é a mensagem que tenho no console, mesmo usando um CEP válido:
TypeError: Cannot read properties of undefined (reading 'erro')
Eu realmente achei estranho que o highlite não marcou o r.erro
. Só pra garantir que está idêntico, aí vai o Ctrl + v:
const consultaCEP = fetch('https://viacep.com.br/ws/01001000/json/')
.then(resposta => resposta.json())
.then(r => {
if(r.erro){
throw Error("Este CEP não existe!")
}else{
console.log(r)
}
}).catch(erro => console.log(erro));
console.log(consultaCEP);
O erro
não reconhecido é justamente o que está dentro do if. Achei estranho, fiz umas alterações meio no chutômetro, mas sem sucesso.
Encontrei meu equívoco. Eu estava "forçando errado o erro". Testando 7 dígitos no CEP, o retorno da API é um 400. Por isso minha mensagem customizada não aparecia. Aqui foi onde respondi, narrando minha epifania: https://cursos.alura.com.br/forum/topico-duvida-catch-esta-sobrepondo-o-if-do-erro-267252