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

201
Visualizações
¿Cómo me aseguro de que las operaciones asíncronas finalicen antes de enviar una respuesta en Express.js?

Estoy tratando de:

  1. Recuperar una matriz de objetos que contienen información de cuenta de mi base de datos,
  2. Use el account_id de esas cuentas para realizar una solicitud de recuperación a una API externa para cada una de las cuentas y recuperar transacciones
  3. Recorra todas las transacciones de cada cuenta y guárdelas una por una en mi base de datos.
  4. Envíe las transacciones recién guardadas de vuelta a la interfaz como respuesta a la llamada API

Todo funciona muy bien, excepto que la última parte de mi código que está fuera de los dos bucles se ejecuta antes de que finalicen las tareas asíncronas.

Mi pregunta es: ¿cómo me aseguro de que la última parte del código (console.log y la consulta de base de datos que recupera las transacciones recién guardadas) se ejecute después de que finalicen todas las tareas asíncronas?

Estaba tratando de usar devoluciones de llamada / promesas y seguir otras guías, pero no logré que funcionara, ¡así que agradecería alguna ayuda!

Tengo el siguiente código Express.js:

 router.post("accounts/transactions", async (req, res) => { //user id sent from frontend const user_id = req.body.user_id; //Find accounts by user_id in DB const accounts = Account.find({ user_id: user_id }).then((accounts) => { return accounts; }); //Once accounts retrieved from DB, loop over them and fetch transactions for each account (await accounts).forEach(async (account) => { const url = `https://someExternalApi.whatever/${account.accountId}/transactions`; const options = { //fetch request options }; const response = await fetch(url, options) .then((res) => res.json()) .catch((e) => { console.error({ message: "Error!", error: e, }); }); //Once transactions for a single account are retrieved from external API, //loop over them and save them one-by-one to DB (await response).transactions.booked.forEach(async (transaction) => { const filter = { transactionId: transaction.transactionId }; const mongooseOptions = { upsert: true, new: true }; const update = { user_id: user_id, //...other keys-value pairs for transaction record updated: Date.now(), }; //Save single transaction to DB Transaction.findOneAndUpdate(filter, update, mongooseOptions) .then( console.log( `Transaction ${ transaction.transactionId } saved!` ) ) .catch((error) => console.log(error)); }); }); //The problem is that the below runs before the above async operations are finished console.log("All transactions updated!"); Transaction.find({ user_id: user_id }).then((transactions) => { res.json(transactions); }); });

¡Gracias!

about 4 years ago · Juan Pablo Isaza
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