【发布时间】:2016-09-28 21:00:31
【问题描述】:
背景信息
我有一个连接到 Redis 数据库以查询值列表的节点/快速应用程序。然后对于返回数据中的每个值,我需要做进一步的查询。
问题
初始查询(redis“扫描”命令)工作正常,但我为初始结果集中的每个项目尝试的 HGETALL 查询未按预期运行。
为了演示这个问题,我在第 34 行添加了一个 console.log 命令来打印出当前扫描记录的值......然后我在 HGETALL 的回调函数中再次打印出来(第 36 行)但是价值观不同。在我看来,它们应该是相同的......但我确信这是我缺少的关于 node.js 工作方式的基本内容。
代码
27 router.get('/', function(req, res, next) {
28 redis.send_command("SCAN", [0,"MATCH", "emergency:*"], function(err, reply) {
29 if (reply) {
30 var retdata = [];
31 console.log('length is: ' + reply[1].length);
32 for (var i = 0; i < reply[1].length; i++) {
33 var emergIP = reply[1][i];
34 console.log('emergIP outside the call: ' + emergIP);
35 redis.hgetall(emergIP, function (err, data) {
36 console.log('emergIP inside the call: ' + emergIP);
37 if (data) {
38 var temp = emergIP.split(":");
39 var key = temp[1];
40 console.log('the key is: ' + key);
41 //retdata.push({key:data.callerid});
42 }
43 });
44 }//end for loop
45 res.send(JSON.stringify(retdata));
46 } //end if
47 else {
48 //no emergency data defined yet
49 var retval = {"res":false, "msg":"no emergency data defined"};
50 res.send(JSON.stringify(retval));
51
52 }
53 }); //end send_command
54 });
55
代码输出
length is: 8
emergIP outside the call: emergency:10.1
emergIP outside the call: emergency:10.2
emergIP outside the call: emergency:10.13
emergIP outside the call: emergency:10.14
emergIP outside the call: emergency:10.18.90
emergIP outside the call: emergency:10.19
emergIP outside the call: emergency:10.20
emergIP outside the call: emergency:10.244
GET /emergency/ 200 220.368 ms - 2
emergIP inside the call: emergency:10.244
the key is: 10.244
emergIP inside the call: emergency:10.244
the key is: 10.244
emergIP inside the call: emergency:10.244
the key is: 10.244
emergIP inside the call: emergency:10.244
the key is: 10.244
emergIP inside the call: emergency:10.244
the key is: 10.244
emergIP inside the call: emergency:10.244
the key is: 10.244
emergIP inside the call: emergency:10.244
the key is: 10.244
emergIP inside the call: emergency:10.244
the key is: 10.244
问题
我认为问题在于我期望 send_command 函数上的回调按顺序发生。换句话说,也许问题是我不应该在另一个函数调用中进行函数调用? 这是我的第一个节点应用程序......我正在学习。
任何建议将不胜感激。
【问题讨论】:
-
@amitmah,是的,我认为你是对的。但我想我不知道搜索该帖子的正确术语。我想知道我是否应该将我的问题留给可能会以我的方式表达他们的问题的其他人......?
标签: javascript node.js express