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

177
Vistas
await no funciona en el proyecto nodejs como se esperaba

Buenos días.

Estoy trabajando en un proyecto expreso y no he podido comprender completamente cómo funcionan las funciones asíncronas y las promesas. Esta es la estructura de mi proyecto.

-controladores --userController.js -servicios --pagoService.js

El servicio de pago es la implementación de una herramienta de pago de terceros y define un método que estoy usando como este

 const pay = async(data) => { service.pay() .then(function(response){ return response; }).catch(function(err)){ console.log(err); }); }

estoy llamando a este método desde mi controlador de usuario

 let payUser = async(req, res) => { const response = await paymentService.pay(req.data); if(response) { res.send(response) } }

pero la respuesta siempre está indefinida, no espera como pensé que debería hacerlo debido a la palabra clave "esperar".

¿Cómo funciona esto exactamente? ¿Qué estoy haciendo mal si quiero que espere hasta que se devuelva la respuesta?

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

0

Hay un problema en su código para la función de pay :

 const pay = async(data) => { service.pay() .then(function(response){ return response; }).catch(function(err)){ console.log(err); }); }

No devuelves nada. Simplemente ejecuta service.pay() . Por lo tanto, la firma de la función pay (declarada en la primera línea) es una función que devuelve una promesa, pero el tipo de devolución es Promise<void> , no Promise<YourData> . Esto hace que siempre devuelva undefined , incluso cuando se llama con await , como en su código de ejemplo completo.

Veo que tienes la return response; dentro de la devolución de llamada "entonces". Esto puede significar que tenía la intención de que esos datos se devolvieran a la persona que llama de pay (no a service.pay ) cuando los datos estuvieran listos. Para hacer esto, debe reescribir su función de pay de una de dos maneras:

  1. Reemplace service.pay ... con return service.pay ... para que la promesa devuelta por service.pay se devuelva realmente a la persona que llama de pay .
  2. Vuelva a escribirlo para que elimine la devolución de llamada "entonces" y reemplace service.pay ... con return await service.pay ... . Ya ha trabajado para diseñar pay como una función asíncrona, por lo que ahora puede usar await dentro de ella, lo que a menudo hace que este tipo de código sea más sencillo de escribir y leer más adelante.
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