Gostaria de saber se eu mudar o then e catch para try e catch funcionara normalmente? ou é um padrão se usar then no JS? Há um padrão a se usar as sintaxe ou vai de como você mesmo modelar as coisas?
Gostaria de saber se eu mudar o then e catch para try e catch funcionara normalmente? ou é um padrão se usar then no JS? Há um padrão a se usar as sintaxe ou vai de como você mesmo modelar as coisas?
Olá Christian, tudo bem?
Então, neste caso são coisas diferentes, mas acredito que peguei a sua linha de raciocinio
Quando estamos trabalhando com Promises
teremos o then
para capturar um valor futuro positivo, e o catch
para capturar erros, neste caso utilizar o try & catch
não funcionária, pois ele executaria de maneira procedural, e teríamos o erro apenas depois do bloco de código executar
const throwError = () => new Promise( (resolve, reject) => reject("Houve um erro"));
(function main(){
try {
throwError();
}catch(error){
console.log(error)
}
console.log("Sai do Try Catch!");
}
)()
E o resultado no console:
Sai do Try Catch!
(node:8343) UnhandledPromiseRejectionWarning: Houve um erro
(node:8343) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
Então neste caso temos que explicitamente utilizar then
e o catch
throwError()
.then( resultado => console.log(resultado))
.catch( erro => console.log(erro))
Agora podemos utilizar o try & catch
se mudarmos para uma função assíncrona, pois dessa forma podemos combinar o async
com o await
na Promise, e ela irá esperar dentro do bloco de tratamento até ter o resultado:
(async function main(){
try {
await throwError();
}catch(error){
console.log(error)
}
console.log("Sai do Try Catch!");
}
)()
E no console:
Houve um erro
Sai do Try Catch!
Então são abordagens diferentes, trabalhando com Promises
diretamente precisamos utilizar o then & catch
, quando utilizamos o async & await
podemos utilizar o try & catch
Compreendeu?
Abraços e Bons Estudos!