Yo uso las promesas de Bluebird aquí. Tenga en cuenta cómo la intención del código es bastante clara y no hay anidamiento.
Primero, prometamos la llamada hgetall y el cliente -
var client = Promise.promisifyAll(client);
Ahora, escribamos el código con promesas, .then en lugar de una devolución de llamada de nodo y agregación con .map . Qué .then lo que hace es indicar que se completó una operación asíncrona. .map toma una variedad de cosas y las asigna todas a una operación asíncrona como su llamada hgetall.
Observe cómo Bluebird agrega (por defecto) un Async sufijo a los 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
});
};