我是第一次使用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函数,但在提到这两者后,我不确定是什么导致了我的错误:
答案 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);
});