redis和nodejs async需要运行两次

时间:2015-07-27 23:07:41

标签: node.js

我正在尝试使用节点redis模块读取redis中的密钥内容。 它可以工作,但需要运行两次以获得redis更新,请检查下面的代码

client.lrange('resque:queue:default',0, -1, function(error, replies){


            replies.forEach(function(item){
                var parsed = JSON.parse(item);


                result.push({
                    'name' : parsed.args[0].name , 
                    'mobno' : parsed.args[0].mobno, 
                    'email' : parsed.args[0].email
                })
            })

        });

        res.json(result);

首次运行:返回空数组[] 第二次运行:获取更新的正确数据 我需要刷新应用程序以获取最新更新。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

res.json(result);移至lrange()回调的末尾:

client.lrange('resque:queue:default',0, -1, function(error, replies){
  replies.forEach(function(item){
    var parsed = JSON.parse(item);

    result.push({
      'name' : parsed.args[0].name , 
      'mobno' : parsed.args[0].mobno, 
      'email' : parsed.args[0].email
    })
  })

  res.json(result);
});

通常,每当您看到需要回调的内容时,它都是异步的,这意味着函数调用将在完成任何操作之前立即返回。这就是result第一次为空的原因,lrange()回调尚未在该点执行。