Ich benutze Node.js w/node_redis und bin ein durch ein Objekt durchlaufen und nach Daten in Redis suchen, dann Ergebnisse zurückgeben.For-Schleife, die Elemente von Redis-Verzögerung erhalten
Ich habe es Setup wie folgt aus:
for (var key in items) {
if (items.hasOwnProperty(key)) {
app.client.llen(items[key].id+'_click', function(err, total) {
items[key].total = total;
});
}
}
callback(items);
Das Problem ist, dass es eine Schleife durch, bevor der Anruf abgeschlossen Redis. So wird der Callback aufgerufen, bevor er tatsächlich den Gesamtwert aktualisiert. Es scheint auch einige Elemente aufgrund der Verzögerung zu überspringen.
Gibt es einen besseren Weg, damit umzugehen?
Vielen Dank!
EDIT:
Ok, so habe ich es wie folgt aktualisiert:
getTotal(function() {
callback(items);
});
getTotal = function (callback) {
var count = 1;
for (var key in items) {
if (items.hasOwnProperty(key)) {
app.client.llen(items[key].id + '_click', function (err, total) {
items[key].total = total;
if (items.length == count) {
callback();
}
count++;
});
};
}
Dies scheint, wie es funktionieren würde, es löst den Rückruf zu gegebener Zeit jedoch scheint es, nur die letzte Der Schlüssel wird insgesamt aktualisiert.
Haben Sie rekursive Version versucht? –
Hm, innerhalb der for-Schleife oder als Ersatz dafür? – dzm