【问题标题】:Node.js & Redis / hget synchronizeNode.js & Redis / hget 同步
【发布时间】:2016-06-02 21:07:09
【问题描述】:

我希望在 node.js 中创建 hget 的同步命令。

我写了以下内容:

var db = require("redis");
var dbclient = db.createClient();
var res1 = dbclient.hget("all_records", "/" + full_path)
if (res1 != undefined){
    objStatus.status = "TRUE"
 } else {
     objStatus.status = "FALSE"
 }

问题是在res1,我总是得到true,而我在这个字段中设置了数字:

dbclient.hset("all_records", key, size); // size is number

如果密钥不存在,它也会返回 true。

如何执行此命令?

编辑(这里是完整代码以及我使用同步调用的原因):

   for (var attr in paths) {
        var full_path = "/0" + attr
        var objStatus = new Object();
        var res1 = dbclient.hget("all_records", "/" + full_path)
        if (res1 != undefined){
            objStatus.status = "TRUE"
        } else {
            objStatus.status = "FALSE"
        }
     }
     arrayResult.push(objStatus);
    }
    return arrayResult;

【问题讨论】:

    标签: node.js redis


    【解决方案1】:

    这部分有问题;

    var res1 = dbclient.hget("all_records", "/" + full_path)
    

    hget 的调用不会返回值,它会在获取值时回调给定的回调(您省略了);

    dbclient.hget("all_records", "/" + full_path, function(err, res) {
      console.log(res);
    });
    

    ...将打印您的密钥的值。

    【讨论】:

    • 但这是异步调用。在完整代码中,我遍历所有记录,然后将结果返回给客户端。如果我使用您的建议,那么我将返回一个空数组 - 因为它不会等待所有 hget 完成。
    • 我编辑问题。根据您的建议,arrayResult 将返回空。
    • @MiddleWare 这不是我的建议,这是这个 Redis API 的工作方式。您很可能必须使您的函数与回调异步或承诺能够以直接的方式将填充的数组传递给调用代码。
    【解决方案2】:

    co + co-redis 可以同步运行

    var co = require('co');
    var redisClient = require('redis').createClient();
    var wrapper = require('co-redis');
    var redisCo = wrapper(redisClient);
    co(function* () {
      var res1 = yield redisCo.hget("all_records", "/" + full_path)
      if (res1 != undefined){
         objStatus.status = "TRUE"
      } else {
         objStatus.status = "FALSE"
      }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 2014-11-03
      • 2012-05-22
      • 2012-10-21
      • 1970-01-01
      • 2016-03-01
      • 2013-03-25
      相关资源
      最近更新 更多