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

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

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 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!