Uso le promesse Bluebird qui. Nota come l'intento del codice è piuttosto chiaro e non c'è nidificazione.
Per prima cosa, promettiamo la chiamata hgetall e il client -
var client = Promise.promisifyAll(client);
Ora scriviamo il codice con le promesse, .then
invece di una richiamata e aggregazione del nodo con .map
. Cosa .then
indica che un'operazione asincrona è stata completata. .map
prende una serie di cose e le mappa tutte su un'operazione asincrona proprio come la tua chiamata hgetall.
Nota come Bluebird aggiunge (per impostazione predefinita) un Async
suffisso ai metodi promessi.
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
});
};