Estoy tratando de:
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!