Os erros não eram para ser pegos pelo catch?
Os erros não eram para ser pegos pelo catch?
Fala Igor,
Então, segundo a MDN, o then() retorna uma Promise , e possui dois argumentos, um para sucesso e outro para falha.
p.then(quandoRealizada, quandoRejeitada);
p.then(function(valor) {
// sucesso
}, function(motivo) {
// rejeitada
});
Caso a requisição seja realizada corretamente executa o primeiro argumento, e caso falhe executa o segundo argumento, como no exemplo dado pelo professor de o servidor estar offline.
Mas vamos supor que a promise foi resolvida, mas a nossa lógica implementada dentro da função de sucesso esta errada e gera um erro. Ele só seria 'pego' pelo catch()
. Um exemplo:
var p = new Promise(function(resolve, reject) {
const num = 0;
if (num == 0) {
resolve('Sucesso na requisição');
} else {
reject('Falha na requisição')
}
});
p.then((res) => {
console.log(res);
throw new Error();
}, (err) => {
console.log(err);
})
.catch((error) => {
console.log('Erro pego pelo catch');
})
//*Saída no Console*
//Sucesso na requisição
//Erro pego pelo catch
Veja que a requisição é resolvida(realizada com sucesso), mas ela gera um erro que é capturado pelo catch()
. Agora se o valor de num
for alterado, a requisição falha e gera apenas a mensagem de rejeição e não entra no catch()
.
Pra facilitar o entendimento, copie esse código e tente executar na sua máquina.
Espero que tenha tenha te ajudado.