Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

316
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!