2

我正在尝试使用“for”循环以编程方式从 Node.js 中的 Redis 数据库中检索值,以迭代 GET 请求。我正在使用“redis”节点模块。我可以使用 console.log 将这些请求的值打印到服务器,但是,我无法将这些值中的每一个推送到全局数组以在另一个 node.js 模块中使用。我想知道这是否是由于 Redis 脚本的“全局变量保护”方面。我也想知道这里是否有解决方法。

redis-cli:

redis 127.0.0.1:6379> SET a "1"
OK
redis 127.0.0.1:6379> SET b "2"
OK
redis 127.0.0.1:6379> SET c "3"
OK

节点.js:

var keys = ['a', 'b', 'c'];
var vals = [];
for(i=0; i<3; i++) {
    client.get(keys[i], function(err, reply) {
        console.log(reply);
        vals.push(reply);
    });
}
console.log(vals);

我希望 vals 数组分别输出与 a、b 和 c...或 1、2 和 3 关联的值。同样,目的是在另一个节点模块中使用这些值。

这是与全局变量保护相关的问题吗?有什么明显的选择吗?绝对觉得我错过了一些明显的东西。

4

1 回答 1

0

client.get是一个async函数。reply's正在vals按预期推进,但不是立即推进。在不久的将来,他们将被推到vals. 因此,当您尝试vals同步记录时,您只会得到empty数组。

使用async.js,您可以执行以下操作:

var vals;
var keys = ['a', 'b', 'c'];
var async = require('async');
async.map(keys, client.get, function(err, results) {
  vals = results;
  console.log(vals);//will print what you wanted.
});

但是,无论如何,您无法vals通过使其成为全局文件来与其他文件共享。我建议您编写asynchronousgetter 函数vals并让其他文件调用该函数来获取vals.

于 2013-07-03T19:29:36.237 回答