node.js redis异步调用

node.js redis asynchronous calls

我在像这样的 foor 循环中使用 redis 从我的数据库中获取数据。

client.smembers(user_key, function(err, reply) {
      console.log("1");
      for(var i=0; i < reply.length; i++) {
        console.log("2");
        client.hgetall(reply[i], function(error, object) {
            console.log("3");
            // Do stuff
        });
      }
      console.log("4");
});

问题是redis是异步的,foor循环不等待redis完成取数据。例如,如果 reply["user_1", "user_2"] 这将是输出:

1
2
2
4
3

如何强制循环等待redis?

使用underscore :: each():

const _ = require('underscore')
client.smembers(user_key, function(err, reply) {
  _.each(reply,function(element, index){
     client.hgetall(element, function(error, object) {
        // Do stuff
     })
  })
})