Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

176
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda