Używam tutaj obietnic Bluebird. Zwróć uwagę, że intencja kodu jest dość jasna i nie ma zagnieżdżania.
Najpierw obiecajmy wywołanie hgetall i klienta -
var client = Promise.promisifyAll(client);
Teraz napiszmy kod z obietnicami, .then
zamiast wywołania zwrotnego węzła i agregacji z .map
. Co .then
oznacza, że operacja asynchroniczna została zakończona. .map
pobiera szereg rzeczy i mapuje je wszystkie do operacji asynchronicznej, podobnie jak wywołanie hgetall.
Zwróć uwagę, jak Bluebird dodaje (domyślnie) Async
przyrostek do obiecanych metod.
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
});
};