内client.multi使用して、私は、デバイスのリストをretriveし、それらのそれぞれのステータスやラベルを取得する必要があり、次のコードしている:node_redis:forEachの
app.get('/test', function(req, res){
db.smembers("devices", function(err1, devices){
var jsonObj = {};
if(!err1) {
var i = 0;
devices.forEach(function(id){
db.multi([
["get", id + ":label"],
["get", id + ":status"],
]).exec(function (err, replies) {
jsonObj[id] = {"label":replies[0], "status":replies[1]};
console.log(jsonObj); // stuff is added on each loop
});
i = i + 1;
if(i == devices.length){
console.log(jsonObj); // jsonObj is {}
h.respond(res, jsonObj);
}
});
} else {
h.respond(res, { "error" : err1 });
}
});
});
デバイスは、IDのリストです。各IDには、「ID:ステータス」、「ID:ラベル」の2つのキーがあります。
h.respondは、http応答を送信するヘルパーメソッドです。
新しいデータが各ループのjsonObjに追加されているのがわかりますが、すべてのループが完了すると空になります。
同様の問題がありました。良い質問 – Federico