Node.js のロジックが正しいかどうかわからないので、この質問をしたいと思います。
redis の get メソッドを使用してクエリを実行する必要がある ID のセットがあります。そして、特定の値をチェックした後(たとえば、指定された「キー」で取得したオブジェクトの名前がnullかどうかをチェックしているとしましょう)、それらをリストに追加します。これが私のコード例です。
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");
しかし、ノードの非同期の性質により、リスト内のすべての ID をチェックせずに、「Goes here...」を実行します。私の必要性は、すべてのIDがチェックされた後に残りの手順を適用することです(redis dbでのマッピングと名前のチェック)。しかし、私はそれを行う方法がわかりません。コールバックを for ループにアタッチし、ループが終了した後に残りの関数が確実に実行されるようにできれば (不可能だとはわかっていますが、アイデアを提供するだけです)。