【问题标题】:Synchronous call to Redis Server同步调用 Redis 服务器
【发布时间】:2014-07-31 05:38:39
【问题描述】:

通过以下代码,我异步访问Redis客户端,用一种随意的Node JS方式来编码:

function start()
{
    var redis = require("redis");
    var host = "127.0.0.1";
    var port = 6379;
    var client = redis.createClient(port, host);    
    
    client.on("error", function (err) {
        console.log("Error " + err);
    });

    client.set("hi", "hey", redis.print);

    return client;
}

function getValue(client, callback)
{
    client.get("hi", function (err, res) {
        callback(res);
    });

}

var c = start();
getValue(c, function(r){
    console.log('Result ' + r);
});

控制台打印“结果嘿”。

我不想在 getValue() 函数中使用回调,而是做一个经典的返回:

function getValue(client)
{
    client.get("hi", function (err, res) {
        return res;
    });

}

为了拥有:

var r = getValue(c);
console.log(r);

所以要对 Redis 服务器进行同步调用。我已经尝试过 async, fibrous, ... 库,但我被卡住了,不知道该怎么做。

【问题讨论】:

  • 您不能直接从函数返回异步结果,因为该函数在结果可用时已经返回。

标签: node.js redis asynchronous


【解决方案1】:

您可能希望将回调传递给您的 client.set() 调用。

client.set("hi", "hey", function (err, res) {
  cb(err, res);
})

【讨论】:

    【解决方案2】:

    可以在以下位置找到类似的线程: How to Sync call in Node.js

    您可以考虑使用stepnode-finish 来实现您想要的效果

    【讨论】:

      猜你喜欢
      • 2011-10-08
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-16
      • 1970-01-01
      相关资源
      最近更新 更多