Me gustaría formular esta pregunta, porque no estoy seguro si obtuve la lógica Node.js correctaNode.js y Redis; Esperando que termine un ciclo
Tengo un conjunto de id que necesito consultar usando redis 'get método. Y después de verificar un cierto valor (digamos que estoy comprobando si el objeto que recibo con la "clave" dada tiene un nombre nulo), los agrego a una lista. Aquí está mi código de ejemplo;
var finalList = [];
var list = [];
redisClient.smembers("student_list", function(err,result){
list = result; //id's of students
console.log(result);
var possibleStudents = [];
for(var i = 0; i < list.length; i++){
redisClient.get(list[i], function(err, result){
if(err)
console.log("Error: "+err);
else{
tempObject = JSON.parse(result);
if(tempObject.name != null){
finalList.push(tempObject);
}
}
});
}
});
console.log("Goes here after checking every single object");
Pero como se esperaba debido a la naturaleza asíncrona de nodo, sin comprobar cada id en la lista se ejecuta el "va aquí ...". Mi necesidad es aplicar el resto de los procedimientos después de que se compruebe cada identificación (mapeo en redis db y verificar el nombre). Pero no sé cómo hacerlo. Tal vez si puedo adjuntar una devolución de llamada al ciclo for y asegurarme de que el resto de mis funciones comiencen a ejecutarse después de que termine el ciclo (sé que es imposible, pero solo para dar una idea).
Ver [esto] (https://i.gyazo.com/129b071f39bbd1a1c491638be634b00c.png), la llamada Redis es asíncrona El. El registro de la consola de mis 'resultados' se mostraría primero, ya que es exactamente la misma lógica que en su ejemplo, hmmm. –