Llevo un par de dias trabajando en este código.
Tengo dos consultas a mysql que se repiten con un forEach
, y necesito esperar a que ambos forEach
se completen si o si antes de seguir.
Explico mi codigo:
Una funcion que debe devolver un array
con objetos, esta función recibe el id_user
a buscar un 'cb' - que es una función callback que se encargara de manejar el array y mostrarlo en pantalla - .
En principio hago un select
que me trae un array
de ids que me servirán para la segunda consulta. Luego esta segunda consulta se repite en un bucle para traer un array
de objetos de distintas tablas, los cuales 'desglozaré' en el segundo for
para ir acumulándolos en mi array
llamado 'matches'.
Mi objetivo es que el array 'matches' se llene de objetos que provienen de distintas tablas pero que tienen en común un id_user
.
El problema es que la función forEach
es asíncronica - lo que hace que se ejecute la linea cb(e,matches)
antes de terminar los for
, consiguiendo por pantalla un array
vació.
Estube leyendo sobre Promesas, pero no hay caso, no logro entenderlas, los ejemplos de internet son muy básicos y no logro encajar este concepto en mi código.
¿Alguien conoce cómo puedo solucionar esta situación?
Este es mi código:
var getMatchByUser=(id_user,cb)=>{
let matches=[];
db.query(`SELECT id_community FROM members_community WHERE id_user=${id_user}`,[],(e,d)=>{
d.forEach(m=>{
db.query(`SELECT * FROM matches_${m.id} WHERE created_by=${id_user}`,[],(e1,d1)=>{
d1.forEach(m1 => {
matches.push(m1);
});
});
});
cb(e,matches);
});
}