Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

406
Vistas
¿Qué es UnhandledPromiseRejectionWarning: Error?

Pegué dos códigos casi iguales con una pequeña diferencia, uno funciona bien pero el otro da UnhandledPromiseRejectionWarning .

 async function promise () { return new Promise((resolve, reject) => { throw new Error(); resolve(); reject(); }) } promise().then((data) =>{console.log('then')}).catch((err)=>{console.log('from the catch')});

La salida es:

 > node index.js from the catch

Pero para este caso

 function promise () { return new Promise(async (resolve, reject) => { throw new Error(); resolve(); reject(); }) } promise().then((data) =>{console.log('then')}).catch((err)=>{console.log('err')});

La salida es algo como esto

 > node index.js (node:98195) UnhandledPromiseRejectionWarning: Error at /home/parthiv/Projects/exp/index.js:47:11 at new Promise (<anonymous>) at promise (/home/parthiv/Projects/exp/index.js:46:10) at Object.<anonymous> (/home/parthiv/Projects/exp/index.js:53:1) at Module._compile (internal/modules/cjs/loader.js:1085:14) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10) at Module.load (internal/modules/cjs/loader.js:950:32) at Function.Module._load (internal/modules/cjs/loader.js:790:12) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12) at internal/main/run_main_module.js:17:47 (Use `node --trace-warnings ...` to show where the warning was created) (node:98195) 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(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1) (node:98195) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

¿Alguien puede explicar este comportamiento de una función asíncrona dentro de la promesa?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Ha pasado una función async a un constructor de Promise, lo cual no es lo correcto. El valor de retorno de la función async es lo que no se controla.

El constructor de Promise está diseñado para uso síncrono e ignora por completo su valor de retorno. Si throw la función que pasa a un constructor de Promise, el constructor de Promise devolverá una promesa rechazada; ese es el comportamiento que ves en tu primer ejemplo. Si la función devuelve un valor, incluso una Promesa, no importará: el valor se descarta .

Sobre el ejecutor, es importante entender lo siguiente:

  • El valor de retorno del ejecutor se ignora.
  • Si se arroja un error en el ejecutor, la promesa se rechaza.

Las funciones async convierten sus llamadas de return y throw a la resolución Promise, pero las funciones async siempre devuelven una Promise. Entonces, en su segundo ejemplo, su throw da como resultado una Promesa rechazada, que luego no se maneja ; el valor de retorno se descarta por completo como se indicó anteriormente. Si no fuera por UnhandledPromiseRejectionWarning, su throw new Error() no tendría síntomas, y la promesa que devolvió su promise() nunca se resolvería.

Si desea que promise() devuelva una promesa, simplemente puede devolver el valor de retorno de la función async interna o (aún mejor) convertir a promise() en sí misma en una función asíncrona. Si necesita las llamadas de resolve / reject , siempre puede return new Promise() desde dentro de la función; cada vez que una función async o un controlador .then() devuelve una Promesa, ese valor de retorno se desenvuelve.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda