Ik gebruik hier Bluebird-beloftes. Merk op dat de bedoeling van de code nogal duidelijk is en dat er geen nesting is.
Laten we eerst de hgetall-oproep en de klant beloven -
var client = Promise.promisifyAll(client);
Laten we nu de code schrijven met beloften, .then
in plaats van een node-callback en aggregatie met .map
. Wat .then
doet is een signaal dat een asynchrone bewerking is voltooid. .map
neemt een reeks dingen en wijst ze allemaal toe aan een asynchrone bewerking, net als uw hgetall-oproep.
Merk op hoe Bluebird (standaard) een Async
. toevoegt achtervoegsel bij beloofde methoden.
exports.awesomeThings = function(req, res) {
// make initial request, map the array - each element to a result
return client.lrangeAsync("awesomeThings", 0, -1).map(function(awesomeThing) {
return client.hgetallAsync("awesomething:" + awesomeThing);
}).then(function(things){ // all results ready
console.log(things); // log them
res.send(JSON.stringify(things)); // send them
return things; // so you can use from outside
});
};