我正在学习 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/