Eu uso promessas do Bluebird aqui. Observe como a intenção do código é bastante clara e não há aninhamento.
Primeiro, vamos prometer a chamada hgetall e o cliente -
var client = Promise.promisifyAll(client);
Agora, vamos escrever o código com promessas,
.then
em vez de um retorno de chamada de nó e agregação com .map
. O que .then
faz é sinalizar que uma operação assíncrona foi concluída. .map
pega uma matriz de coisas e mapeia todas para uma operação assíncrona, assim como sua chamada hgetall. Observe como o Bluebird adiciona (por padrão) um
Async
sufixo para métodos prometidos. 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
});
};