3
respostas

Dúvida na captura do Erro

para poder mostar somente a mensagem de erro, tive que alterar meu código para como está abaixo:

catch (error) {
    if (error instanceof Error) {
      alert(error.message);
    }
  }

pois objeto "erro" no meu projeto não tem o atributo "message" para eu obter somente a mensagem. Eu poderia passar objeto direto no alert mas não acho que fica uma mensagem legal. Qual o motivo desta diferença ?

3 respostas

E aí, Jorge!

Então, o Error é um tipo de objeto padrão do JavaScript que mostra um erro. Quando você dá um "throw", esse objeto Error entra em cena e pode ser agarrado num "catch". Ele tem várias propriedades, e uma delas é a "message".

A "message" é tipo um texto que explica o erro. Se você solta um erro assim: throw new Error("Erro aqui!"), esse texto vai direto pra propriedade "message" do objeto Error.

No seu lance, você tá olhando se o erro que pegou é do tipo Error e depois quer ver o que tem na "message". Se esse erro não for do tipo Error, aí é que tá o problema: ele não vai ter essa "message".

Olha só um exemplo na prática:

try {
  throw new Error("Bro, deu ruim aqui!");
} catch (error) {
  if (error instanceof Error) {
    console.log(error.message); // Vai mostrar: "Bro, deu ruim aqui!"
  }
}

Se o erro que tá pegando não for do tipo Error, tenta só imprimir o erro mesmo pra ver o que tem lá.

Mas eu tive que fazer desta maneira pois utilizando o código abaixo não estava funcionando. Quando eu passo "error.message" dá erro. Se eu passar o objeto "error" no console log, ele mostra a mensagem porém ele acrescenta a palavra "Error:" no começo e fica assim: "Error: mensagem-de-erro-do-throw"... E eu quero mostrar somente a mensagem.

catch (error) {
       console.log(error.message);
  }

Segue o erro que ele me mostra: Erro erro.message