1
resposta

Catch vs erro do then

Os erros não eram para ser pegos pelo catch?

1 resposta

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.