javascript - 如何使用带有 for 循环的 Node.js 和 Redis 分配全局变量?

标签 javascript node.js redis node-redis

我正在尝试使用“for”循环迭代 GET 请求,以编程方式从 Node.js 中的 Redis 数据库中检索值。我正在使用“redis” Node 模块。我可以使用 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 关联的值。同样,目的是在另一个 Node 模块中使用这些值。

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

最佳答案

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

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。 我建议您为 vals 编写 asynchronous getter 函数,并让其他文件调用该函数来获取 vals

关于javascript - 如何使用带有 for 循环的 Node.js 和 Redis 分配全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17456421/

相关文章:

javascript - 使用 if、else if 和 else 时出现意外标记 else

javascript - 如何使用按钮触发 jQuery 验证?

node.js mongoose 外键检索

node.js - 在 node.js 中,如何识别缓冲区是二进制还是文本?

Ruby - 基于 Redis 的具有过期实现的互斥锁

javascript - Mobile Safari 自动对焦文本字段

javascript - 从 via 更改数据似乎正在修改 localStorage 对象

javascript - 在react中导入和导出模块

node.js - 当我尝试将数据传递给 Node 中的响应时,我得到 : "error": {"message" :"Cannot read property ' length' of undefined",

node.js - Heroku Node.js RedisCloud Redis::CannotConnectError 在本地主机上而不是 REDISCLOUD_URL