De bovenstaande code doet mogelijk niet wat u verwacht. Je begint elke .get()
in volgorde, maar ze bellen misschien niet in volgorde terug, zodat de resultaten in willekeurige volgorde kunnen worden weergegeven. Als u de resultaten wilt streamen in plaats van ze in het geheugen te verzamelen, moet u .get()
in volgorde.
Ik denk dat de asynchrone bibliotheek van caolan dit veel gemakkelijker maakt. Hier is een manier waarop je het zou kunnen gebruiken om elk item in volgorde te krijgen (waarschuwing, niet getest):
app.get("/facility", function(req, res) {
rc.keys("FACILITY*", function(err, replies) {
var i = 0;
res.write("[");
async.forEachSeries(replies, function(reply, callback){
rc.get(reply, function(err, reply) {
if (err){
callback(err);
return;
}
res.write(reply);
if (i < replies.length) {
res.write(",");
}
i++;
callback();
});
}, function(err){
if (err) {
// Handle an error
} else {
res.end(']');
}
});
});
});
Als de bestelling je niet interesseert, gebruik dan gewoon async.forEach()
in plaats daarvan.
Als u het niet erg vindt om de resultaten te verzamelen en ze in volgorde wilt retourneren, kunt u async.map()
gebruiken zoals dit (waarschuwing, ook niet getest):
app.get("/facility", function(req, res) {
rc.keys("FACILITY*", function(err, replies) {
async.map(replies, rc.get.bind(rc), function(err, replies){
if (err) {
// Handle an error
} else {
res.end('[' + replies.join(',') + ']');
}
});
});
});