Estoy tratando de devolver un valor después de que se haya completado un bucle for, el bucle for está dentro de una función asíncrona. Dentro del bucle, hay una consulta que se inserta en la base de datos.
La función funciona bien, pero cuando uso cartero, la respuesta vuelve vacía (aunque los valores se hayan insertado en la base de datos)
Así es como llamo a la función:
insertarPracticas(turno_id,req.body.lista_codigos_practicas, queryInsertarPracticas) .then( result=> { res.status(200).json({ "Practicas Agregadas": result }) } )Y aquí está la función:
async function insertarPracticas(turno_id, req, queryInsertarPracticas){ //practicasAgregadas=""; return new Promise((resolve, reject) => { for (let i=0; i< req.length; i++){ connection.query( queryInsertarPracticas, [turno_id, req[i]],(error2, row2) => { if (error2) { console.log("Error al insertar turno detalle (prácticas): "+req[i] +" "+ error2); practicasNoAgregadas += req[i] + "-"; }else{ console.log("Turnos detalle agregados "+req[i]); practicasAgregadas += req[i] + "-"; console.log("practicas "+practicasAgregadas); } }); console.log("en for "+practicasAgregadas); } resolve(practicasAgregadas) // Or of there was an error reject("error"); })Lo que sucede aquí es que la función no esperará a que finalice la consulta de conexión, incluso si inserta valores en la base de datos, en Postman obtengo el primer resultado, que está vacío:
Pero tengo los valores insertados en mi base de datos.
¿Cuál es la forma correcta de manejar esto? Intenté usar map en lugar de for, y ahora lo intento con promesa, pero no estoy seguro de estar usándolo correctamente.
Aquí está la consola, donde se puede ver que el archivo console.log("en for" + practicasAgregadas) regresa vacío, cuando debería tener algunos valores.