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
});
};