ここではBluebirdの約束を使用します。コードの意図がかなり明確であり、ネストがないことに注意してください。
まず、hgetall呼び出しとクライアントを約束しましょう-
var client = Promise.promisifyAll(client);
それでは、promiseを使用してコードを記述しましょう。.then
.map
を使用したノードコールバックと集計の代わりに 。何.then
非同期操作が完了したことを通知します。 .map
一連のものを受け取り、hgetall呼び出しと同じように、それらすべてを非同期操作にマップします。
Bluebirdが(デフォルトで)Async
を追加する方法に注意してください 約束されたメソッドの接尾辞。
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
});
};