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

106
Visualizações
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? :)

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

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.

about 4 years ago · Juan Pablo Isaza Relatório

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);
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