chciałbym zadać to pytanie, ponieważ nie jestem pewien, czy mam prawo logiki node.jsNode.js i Redis; Oczekiwanie na pętli, aby zakończyć
Mam zestaw identyfikatorów, że muszę zapytać korzystając Redis' get metoda. A po sprawdzeniu pewnej wartości (powiedzmy, że sprawdzam, czy obiekt, który otrzymałem z danym "kluczem" ma pustą nazwę), dodaję je do listy. Oto mój przykładowy kod;
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");
Ale jak oczekiwano ze względu na charakter asynchroniczny węzła, bez sprawdzania każdego identyfikatora na liście to wykonuje „Goes tutaj ...”. Moją potrzebą jest zastosowanie pozostałych procedur po sprawdzeniu wszystkich identyfikatorów (mapowanie w bazie danych redis i sprawdzanie nazwy). Ale nie wiem, jak to zrobić. Może gdybym mógł dołączyć wywołanie zwrotne do pętli for i upewnić się, że reszta moich funkcji zaczyna działać po zakończeniu pętli (wiem, że to niemożliwe, ale po prostu dać pomysł)?
Pierwszy przykład nie wydają się działać dla mnie :(Zobacz [to] (https://i.gyazo.com/129b071f39bbd1a1c491638be634b00c.png), wywołanie Redis jest asynchroniczne. log konsoli moich "wyników" będzie pokazany jako pierwszy, ponieważ jest to dokładnie taka sama logika jak w twoim przykładzie, hmmm. –