如何使用Node.js和Redis for for循环分配全局变量?

时间:2013-07-03 19:20:36

标签: javascript node.js redis node-redis

我正在尝试以编程方式从Node.js中的Redis数据库中检索值,使用'for'循环来迭代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

的node.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相关的值。同样,目的是在另一个节点模块中使用这些值。

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

1 个答案:

答案 0 :(得分:0)

client.getasync函数。 reply's按预期被推送到vals,但不会立即推送到vals。在不久的将来,他们将被推到vals。因此,当您尝试同步记录empty时,您将只获得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. }); 数组。

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

vals

但是,无论如何,您不能通过将asynchronous与其他文件进行全局共享来共享vals。 我建议你为vals&amp;编写{{1}} getter函数使其他文件调用该函数以获取{{1}}。