J'utilise les promesses Bluebird ici. Notez que l'intention du code est plutôt claire et qu'il n'y a pas d'imbrication.
Tout d'abord, promettons l'appel hgetall et le client -
var client = Promise.promisifyAll(client);
Maintenant, écrivons le code avec des promesses, .then
au lieu d'un rappel de nœud et d'une agrégation avec .map
. Qu'est-ce que .then
signale qu'une opération asynchrone est terminée. .map
prend un tableau de choses et les mappe toutes à une opération asynchrone, tout comme votre appel hgetall.
Notez comment Bluebird ajoute (par défaut) un Async
suffixe aux méthodes promises.
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
});
};