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

132
Vistas
Llamar a .finally en una promesa que se trata/captura manejada en otro lugar provoca UnhandledPromiseRejection en nodejs

Recientemente encontré un comportamiento extraño con nodejs. Lo explicaré con el siguiente ejemplo:

digamos que tenemos dos funciones, foo y bar , foo crea una promesa, llama a .finally() y la devuelve. bar por otro lado, envuelve la promesa con un try/catch.

 const foo = () => {
 const promise = new Promise((resolve, reject) => {
 reject('my-error');
 });
 
 promise.finally(() => {
 console.log('at foo');
 });

 return promise;
}

const bar = async () => {
 try {
 const result = await foo();
 } catch (e) {
 console.log('at bar: ', e);
 }
}

bar();

la salida seria:

 at foo
at bar: my-error
node:internal/process/promises:279
 triggerUncaughtException(err, true /* fromPromise */);
 ^

[UnhandledPromiseRejection: 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(). The promise rejected with the reason "my-error".] {
 code: 'ERR_UNHANDLED_REJECTION'
}

A partir de la salida, podemos ver que el error es manejado por la función de bar , pero se lanza un error UnhandledPromiseRejection .

Sin embargo, si reemplazamos .finally() con .catch() no ocurrirá tal error.

 const foo = () => {
 const promise = new Promise((resolve, reject) => {
 reject('my-error');
 });

 promise.catch(() => {
 console.log('at foo');
 });

 return promise;
}

No estoy seguro de lo que está pasando aquí; Agradecería si alguien pudiera ayudarme a visualizar lo que está sucediendo.

almost 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

then , catch y finally cree nuevas promesas que se resuelvan según la promesa que usted llama y el resultado de la función de controlador que les pasa. (Si la resolución a es un poco desconocida, consulte la publicación de mi blog sobre terminología de promesa ).

Si desea utilizar finally la promesa creada en foo , devuelva la promesa resultante en lugar de usar catch de la siguiente manera

const foo = (props) => {
  return new Promise((resolve, reject) => {
    reject('my-error');
  }).finally(() => {
    console.log('at foo');
  });
}

const bar = async (e) => {
  try {
    await foo();
  } catch (error) {
    console.log('at bar: ', error);
  }
}

bar();

almost 4 years ago · Santiago Trujillo 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