我在这里使用Bluebird的承诺.注意代码的意图是如何清晰的,没有嵌套.
首先,让我们宣传 hgetall呼叫和客户端 -
var client = Promise.promisifyAll(client);
现在,让我们用promises编写代码,.then
而不是用节点回调和聚合.map
.什么.then
是异步操作完成的信号..map
获取一系列内容并将它们全部映射到异步操作,就像您的hgetall调用一样.
请注意Bluebird如何Async
为promisifed方法添加(默认情况下)后缀.
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 }); };