Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

328
Visualizações
¿Por qué no captó la promesa rechazada?

Me preguntaba por qué el bloque try-catch no pudo detectar la promesa rechazada de foo .

Frustrado, necesito ayuda. Gracias por adelantado.

 function addTask(task) { setTimeout(() => { task.resolver() }, 1000) } function foo() { return new Promise((resolve, reject) => { const task = { resolver: function() { reject('task failed') } } addTask(task) }) } function test() { try { foo() } catch (e) { console.error(e) } } // Uncaught (in promise) task failed test()
about 4 years ago · Santiago Gelvez
3 Respostas
Responde à pergunta

0

Es la misma razón que si tuvieras:

 const result = foo();

Entonces tendría una promesa almacenada en result y no el valor liquidado de la promesa.

Se inicia el código asíncrono, luego continúa la función de llamada.

Algún tiempo después , la promesa es rechazada, pero para entonces es demasiado tarde para que el código en test() la atrape.


Si hubiera await a ed foo() , lo que requeriría que test() sea async , entonces se detectaría.

De lo contrario, podría necesitar usar foo().catch(...) .

about 4 years ago · Santiago Gelvez Relatório

0

Las promesas son asincrónicas pero no estás esperando . Significa que el código continúa. Así que tienes que await o tienes que usar then().catch() . Algo como esto:

 function addTask(task) { setTimeout(() => { task.resolver() }, 1000) } function foo() { return new Promise((resolve, reject) => { const task = { resolver: function() { reject('task failed') } } addTask(task) }) } function test() { foo().then(console.log).catch(console.error); } // Uncaught (in promise) task failed test()

about 4 years ago · Santiago Gelvez Relatório

0

Para simplificar tu ejemplo:

 function foo() { return new Promise((resolve, reject) => setTimeout(reject, 1000)) } function test() { try { foo() } catch (e) { console.error("Error"); return; } console.log("OK!"); } test()

imprimirá "¡OK!" de hecho, haga que Node.js genere un UnhandledPromiseRejection, ya que la invocación de foo() es simplemente "tirar" el valor del resultado de la promesa. El catch() solo capturaría excepciones sincrónicas, no prometería rechazos.

Convertir la función en async function test() y await en foo() generará correctamente un Error y no un rechazo no controlado.

about 4 years ago · Santiago Gelvez Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda