Redis GET函数返回undefined

时间:2014-02-11 12:13:38

标签: javascript node.js redis

我是第一次使用node.js和redis构建一个非常简单的客户端/服务器应用程序。在成功启动我的redis客户端和我的http服务器后,我正在尝试使用我的redis客户端进行简单的SET / GET。

我先做:

client.set('apple', 10, redis.print);

返回Reply:Ok

紧接着,我执行:

client.get('apple', function(err, reply) {
    count = parseInt(reply);
    return count;
});

奇怪的是,在打印出count后,我得到undefined。但是,如果我使用redis.print,例如:

client.get('apple', redis.print);

控制台中返回Reply: 10。如果我执行了10,我也会显示console.log(count)

我想也许我是在滥用模块中的set函数,但在提到这两者后,我不确定是什么导致了我的错误:

node_redis - github readme

redis.io API - GET

2 个答案:

答案 0 :(得分:2)

  

打印出计数后,我得到了不确定。

client.get('apple', function(err, reply) {
    count = parseInt(reply);
    return count;
});

console.log(count); // is this where you get undefined?
                    // count at this point is, in fact, undefined,
                    // because it's set in a callback which was not yet fired.

我没有在node.js中编程,所以我不确定从回调中返回计数的好处。它会把它归还给哪里?这不应该是这样的吗?

client.get('apple', function(err, reply) {
    count = parseInt(reply);
    // do something with the count here. Print it or whatever.
});

或者你可以将它捕获到一个闭包中,但是你需要以某种方式等待回调并返回并设置变量。如何做到 - 我不知道。

var count = null;
client.get('apple', function(err, reply) {
    count = parseInt(reply);
});

// TODO: wait for callback
console.log(count);

答案 1 :(得分:0)

这是异步的,这意味着其余代码在等待回调的同时执行。

如果要检查您的打印机是否有效,只需打印:

  

client.get('apple',function(err,reply){

     

console.log(reply);

     

});