我一直在尝试使用 MongoDB、Redis、NodeJS 和 socket.io 创建一个包含多个房间的聊天应用程序。我需要查询一个名为 roomDocumentState
的 Redis 列表并将值返回到一个变量中。这个变量必须在全局范围内,需要修改。
我尝试使用的代码仅修改函数中的局部变量。我读过它叫做“关闭”的东西。谁能告诉我如何正确实现它?
这是从 Redis 中提取数据并修改变量 count_1
的代码:
function checkRoomDocumentState() {
var count_1 = 0;
store.llen(roomDocumentState, (err, res) => {
if (err) {
throw err;
}
else {
if (res > count_1) {
count_1 = res;
return count_1;
}
}
});
}
所以这个函数的调用方式如下,这里是一段代码:
io.sockets.on('connection', client => {
createWhiteboardRooms();
sub.subscribe(roomDocumentState);
store.lpush(roomDocumentState, event1);
//added this to check if there's any value at all
checkRoomDocumentState();
console.log(checkRoomDocumentState());
sub.on("message", (channel, message) => {
console.log(message);
client.send(message);
});
});
最佳答案
如果你想要全局化的变量是count_1
,那么你必须去掉它前面的var
关键字。
但是,正如下面评论中所解释的,最好使用回调来传递值:
function doSomethingAsync(resultIsAvailable) {
redis.doSomethingElseAsync((err,res) => {
result = 'redis told me ' + res;
resultIsAvailable(result);
});
}
doSomethingAsync((result) => {
console.log('my function has been told by redis that ' + result);
});
关于javascript - 如何通过函数更新全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46505574/