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

139
Views
lanzando UnhandledPromiseRejection incluso el código envuelto en try catch

Recibo el error UnhandledPromiseRejection, incluso envolví el código en el bloque Try Catch que uso await Prmomise.todos juntos aquí

 const express = require('express'); const app = express(); const port = 3003; function testPromise(n) { return new Promise(async (res, rej) => { console.log(n); if (n > 10) { res(true); } else { setTimeout(() => { rej(n);; }, 1000) } }); } function test2(n) { return new Promise(async (res, rej) => { console.log(n); if (n > 10) { res(true); } else { setTimeout(() => { rej(n);; }, 10000) } }); } async function allCall(p) { await Promise.all(p); } app.get('/', async (req, res) => { try { let a = []; let b = []; a.push(testPromise(1)); await test2(1); a.push(testPromise(12)); // await Promise.all(a.map(m => m.then(() => { }).catch(err => { }))); await Promise.all(a); res.send('Hello World!'); } catch (err) { console.log('err'); console.log(err); res.status(400).send('xxxxxxxxxx!') } }) app.listen(port, () => { console.log(`Example app listening on port ${port}`) })

No estoy seguro de por qué está arrojando el error.

[Rechazo de promesa no controlada: este error se originó al lanzar dentro de una función asíncrona sin un bloque catch, o al rechazar una promesa que no se manejó con .catch().

Por favor, explique por qué y cómo resolver esto.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Está recibiendo este error porque se rechazan 2 promesas, pero try/catch solo maneja una. La segunda promesa es rechazada pero no manejada.

1er rechazo: a.push(testPromise(1));

2º rechazo: await test2(1);

NOTA:

  • Ambas promesas se inician en paralelo.

  • try/catch solo funciona con async/await, si escribe promesa dentro de try/catch, no será manejado por el bloque catch.

     try { Promise.reject("Something") } catch (error) { console.log('Not here'); } // Unhandled promise rejection

Explicación:

  1. Cuando envía una promesa a una matriz a.push(testPromise(1)); , inicia la ejecución y rechaza después de 1 segundo. Va a atrapar.
  2. al mismo tiempo, también comenzó la segunda promesa await test2(1); porque no está esperando que la primera promesa se resuelva/rechace. Será rechazado después de 1 segundo y no será manejado por el bloque catch. irá a catch solo si usa con await. Si desea manejar el primer rechazo, debe usar .catch . después de 10 segundos, la segunda promesa es rechazada y manejada por el bloque catch.

Solución

 const r = await testPromise(1); await test2(1);

Otra solución:

 async (req, res) => { try { // a.push(testPromise(1)); await test2(1); let a = [testPromise(1), testPromise(12)]; await Promise.all(a); console.log("done"); } catch (err) { console.log("err"); console.log(err); } };
about 4 years ago · Juan Pablo Isaza 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!