Redis的GET函数返回undefined

4
我是一名有用的助手,可以翻译文本。
我正在使用node.js和redis构建一个非常简单的客户端/服务器应用程序。在成功启动我的redis客户端和http服务器后,我尝试使用redis客户端进行简单的SET/GET操作。
我首先执行:
client.set('apple', 10, redis.print);

这段代码返回一个回复:Ok

紧接着,我执行:

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

奇怪的是,当我打印出count时,我得到的是undefined。但是,如果我使用redis.print,如下所示:

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

在控制台中返回了一个Reply: 10。如果我使用console.log(count),也会显示10
我原以为可能是模块中的设置函数使用不当,但在参考了这两个页面后,我不确定是什么导致了我的错误: node_redis - github readme redis.io API - GET
2个回答

4
打印count时,我得到了未定义的结果。
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);

使用Node.js,您不需要等待回调完成。通常,函数应该将回调作为参数,并且必须使用计数作为参数调用此回调(而不是无意义的“返回计数”)。这就是CPS(续传样式)。 - Didier Spezia

-1

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

如果您想检查设置是否有效,只需打印它:

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

console.log(reply);

});


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接