Jeg bruger Bluebird løfter her. Bemærk, hvordan hensigten med koden er ret klar, og der ikke er nogen indlejring.
Lad os først love hgetall-kaldet og klienten -
var client = Promise.promisifyAll(client);
Lad os nu skrive koden med løfter, .then
i stedet for et nodetilbagekald og aggregering med .map
. Hvad .then
signalerer, at en asynkronisering er fuldført. .map
tager en række ting og kortlægger dem alle til en asynkronoperation ligesom dit hgetall-opkald.
Bemærk, hvordan Bluebird tilføjer (som standard) en Async
suffiks til lovede metoder.
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
});
};