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

158
Vistas
Problema de espera asincrónica

En mi módulo de controlador tengo una función httpAddNewLaunch que invoca en la solicitud POST:

 async function httpAddNewLaunch(req, res) { let launch = req.body addNewLaunch(launch) console.log(launch) return res.status(201).json(launch) }

Función AddNewLaunch:

 async function addNewLaunch(launch) { launch.flightNumber = (await launchesDataBase.findOne({})).flightNumber + 1 console.log(launch) await saveLaunch(launch) // launches.set(launch.flightNumber, launch) }

función saveLaunch:

 async function saveLaunch(launch) { await launchesDataBase.findOneAndReplace({ flightNumber: launch.flightNumber }, launch, { upsert: true }) }

Cuando se invoca la función httpAddNewLaunch , no espera hasta que finalicen otras funciones que invoca (addNewLaunch(launch) -> saveLaunch(launch)), simplemente continúa ejecutándose, así que cuando console.log(launch) después de llamar a addNewLaunch(launch) registra un objeto sin número de vuelo .

Pero luego agrego await antes de addNewLaunch(launch), agrega el número de vuelo.

¿Por qué funciona de esa manera, si las funciones asíncronas son solo funciones que devuelven una Promesa, pero se ejecutan como funciones normales, por lo que deben ejecutarse en el orden en que fueron invocadas, pero en mi caso no espera y solo consola? registros (lanzamiento) sin número de vuelo?

¿Puedes explicarme dónde me equivoco? :)

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Sugiero leer sobre cómo funcionan Promises y async/await . Hay muchas buenas guías/explicaciones, que probablemente deberías haber leído antes de comenzar a usarlas.

Básicamente, las funciones JS ejecutan declaración por declaración. La palabra clave await básicamente pone esto en su cabeza: su llamada de función actual se "pausará" hasta que se resuelva la Promesa dada. Y si se rechaza, su await promise se lanzará en su lugar. Ese es el objetivo de una función async : poder "pausar la llamada a la función" mientras se await el cumplimiento de otra promesa.

over 4 years ago · Santiago Trujillo Denunciar

0

Una función asíncrona esencialmente devuelve una promesa. Por lo tanto, cuando llama a addNewLaunch(launch) sin esperar, la promesa se resuelve/rechaza pero no está esperando la respuesta. Agregue await para "esperar" a que finalice la promesa.

 await addNewLaunch(launch);
over 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