Erros em Promises
Promises também tornam o tratamento de erros de forma elegante com o uso do método catch.
.catch()
Imagine que você está usando o método .fetch() de uma biblioteca que faz o GET para pegar o HTML de uma página. Esse método retorna uma promise e é possível que ela seja rejeitada caso aconteça um erro (como não encontrar a página web por problemas de conexão etc).
Segue um código de exemplo:
someLib.fetch("https://url.com").then((html) => console.log(html))Se deixarmos o código assim, podemos ter o seguinte erro:
Uncaught (in promise) [Mensagem do erro]O Uncaught (in promise) acontece quando a promise é rejeitada (ou é dado um throw), ou seja, aconteceu um erro e não lidamos com ele.
O método .catch() vai servir justamente para isso. O código abaixo mostra a sua utilização:
someLib.fetch("https://url.com")
.then((html) => console.log(html))
.catch((error) => {
console.error(`Erro! Informações: ${error}`)
})Encadeamento com o catch
O catchpode lidar com erros de múltiplas promises:
someLib.fetch("https://url.com")
.then(return something)
.then(return somethingAgain)
.catch(error => console.error(error))Nesse caso, a promise vai lidar com qualquer erro que aconteça dentro do fetch ou do primeiro/segundo then.
Se fizermos outro then, vai ser necessário um catchlogo após para lidar com o erro, como no exemplo abaixo:
Se fizermos um then após um catch, vamos precisar de outro catch (após esse then) para lidar com os erros dele. Segue o exemplo abaixo:
someLib.fetch("https://url.com")
.then(return something)
.then(return somethingAgain)
.catch(error => console.error(error) // Lida com qualquer erro do fetch ou do primeiro/segundo then
.then(return anotherSometing) // O catch de cima não pode lidar com o erro desse then
.catch((error) => console.error(error)) // Lida com erro do then de cimaLast updated
Was this helpful?