He estado tratando de enviar los resultados de la consulta de MySQL a una lista (Lista de compras), pero la Lista de compras siempre está vacía, aunque recibo 2 resultados.
Creo que el problema está en alguna parte con el manejo de la promesa, pero no he podido resolverlo:
static async showShoppingList(userId) { let shoppingList = []; const sql = "SELECT item_name, family_member_name FROM shopping_list WHERE user_id = (?)"; await db.promise().query(sql, [userId], function (err, results) { for (const result of results) { shoppingList.push(result) console.log(shoppingList) // Here it appears with results } }); console.log(shoppingList) // Here it appears empty return shoppingList; }Esto se debe a que la function(err, results) se ejecuta de forma asíncrona , después de que la base de datos haya devuelto los resultados, mientras que la otra instrucción se ejecuta de forma síncrona :
db.promise().query envía la consulta a la base de datos.shoppingList vacía se escribe en la consola y se devuelve.results , se ejecuta la función de devolución de llamada, escribiendo la lista de shoppingList completa en la consola.