Zde používám sliby Bluebird. Všimněte si, že záměr kódu je poměrně jasný a není zde žádné vnoření.
Nejprve slíbíme volání hgetall a klienta -
var client = Promise.promisifyAll(client);
Nyní napíšeme kód se sliby, .then
místo zpětného volání uzlu a agregace s .map
. Co .then
signalizuje dokončení asynchronní operace. .map
vezme řadu věcí a všechny je namapuje na asynchronní operaci, jako je vaše volání hgetall.
Všimněte si, jak Bluebird přidává (ve výchozím nastavení) Async
přípona ke slíbeným metodám.
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
});
};