Tengo un problema asíncrono y he seguido muchos artículos en línea para tratar de solucionar este problema, pero no ha funcionado.
async function getNumOfSessionForTrainerClientList(req, res, rows, allowedToAddMoreClients, alertMessage) { let sessionData2 = [] var getNumOfSessionForTrainerClientList = "select * from SCHEDULE WHERE CLIENT_USERNAME = ? AND ASSIGNED_TRAINER = ?" mysqlconn.connect(async function(err) { if (err) { console.error('Database connection failed: ' + err.stack); return; } for (var i = 0; i < rows.length; i++) { mysqlconn.query(getNumOfSessionForTrainerClientList, [rows[i].USERNAME, req.session.username], async function(err, sessionData) { if (err) { console.log(err); } else { for (var x = 0; x < sessionData.length; x++) { sessionData2.push(sessionData[x].SESSION_STATUS) console.log(sessionData2) } } }) } }) await res.render('trainerclientlist.ejs', {data: rows, trainerFirstName: req.session.firstname, trainerLastName: req.session.lastname, allowedToAddMoreClients: allowedToAddMoreClients, profilePhoto: req.session.profilePhoto, alertMessage: req.session.selectedalertmessage, sessionData: sessionData2}) console.log(sessionData2) } lo que sucede es que console.log(sessionData2) sucede DESPUÉS de que se representa la página, await res.render('trainerclientlist.ejs', {data: rows, trainerFirstName: req.session.firstname, trainerLastName: req.session.lastname, allowedToAddMoreClients: allowedToAddMoreClients, profilePhoto: req.session.profilePhoto, alertMessage: req.session.selectedalertmessage, sessionData: sessionData2}) . ¿Cómo puedo arreglar esto?
for (var i = 0; i < rows.length; i++) { // I'd avoid this line // This will force query x-amount of times, mysqlconn.query(getNumOfSessionForTrainerClientList, [rows[i].USERNAME, req.session.username], async function(err, sessionData) { if (err) { console.log(err); } else { // this could had been returned 200ms ->5s from when it's called for (var x = 0; x < sessionData.length; x++) { sessionData2.push(sessionData[x].SESSION_STATUS) console.log(sessionData2) } // I'd make your res.render call here or call for the next query till all are finished and when none left, now call res.render here... } }) } // probably took 1-20ms to complete the loop and so sessionData2 is not ready.. console.log(sessionData);La mayor solución que puede hacer es configurar esto para que no tenga que recorrer filas.longitud... luego puede simplemente ejecutar res.render cuando MySQL responda.