javascript - 等待 Redis 在 Node.JS 中设置数组

标签 javascript node.js sockets redis socket.io

我正在学习 Javascript/Node.JS 并且进展顺利,但我在使用下面的代码时遇到了一些问题。但是,当我打开发出点击的页面时,它会在 Node.JS 中输出 trck_visitors 数组。第一次点击时,这个数组是空的,它不显示我刚刚设置的 trck_visitors[socket.id]。如果我刷新页面,我会在 console.log 中看到输出上一次点击的 ID,而不是当前点击的 ID。

为什么它不输出我刚刚设置的 trck_visitors[socket.id],但输出以前点击的 trck_visitors[socket.id]

var trck_visitors = [];

io.sockets.on('connection', function (socket) {
    socket.on('hit', function (data) {
            redis.get("Node->Username->"+parseInt(getToken), function(err, reply) {
                if(reply === null){
                    trck_visitors[socket.id] = {'Gebruikersnaam' : 'Gast', 'Page' : data.url};
                }else{
                    trck_visitors[socket.id] = {'Gebruikersnaam' : reply, 'Page' : data.url};
                }
            });

        console.log(trck_visitors);
    });
});

编辑:

将代码更新为实际代码。 Redis 似乎是问题所在,console.log 没有等待 redis.get 设置 trck_visitors[socket.id]。如何让其余代码等待 redis.get 设置 trck_visitors[socket.id]

提前致谢

最佳答案

您已经确定了您的问题:console.log 在 Redis 的响应到来之前正在执行。这是异步代码的典型情况。

所以,只需将您的日志记录放入 Redis 的回调中:

var trck_visitors = [];

io.sockets.on('connection', function (socket) {
  socket.on('hit', function (data) {
    redis.get("Node->Username->"+parseInt(getToken), function(err, reply) {
      if(reply === null){
        trck_visitors[socket.id] = {'Gebruikersnaam' : 'Gast', 'Page' : data.url};
      }
      else {
        trck_visitors[socket.id] = {'Gebruikersnaam' : reply, 'Page' : data.url};
      }

      console.log(trck_visitors);
    });
  });
});

关于javascript - 等待 Redis 在 Node.JS 中设置数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23870312/

相关文章:

node.js - 将服务器端代码添加到 angular-cli 项目与 Node 类型冲突

java - 套接字文件传输 : Receiver stuck in reading from buffer/writing to storage

c# - TCP 客户端断开连接

javascript - 如何让网站认为 PhantomJS 不是 iPhone?

javascript - 使用输入类型=文件选择文件并使用 ng-repeat 显示路径后触发函数

javascript - ExtJS网格分页行选择

node.js - ReactJS 从 Express 服务器下载文件

mysql - Sequelize : Parent with at least one children

sockets - 如何设置 std::net::UdpSocket 超时?

javascript - azure-mobile-apps-node 中的错误中间件