我一直在尝试使用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);
});
});
答案 0 :(得分:1)
如果要使全局变量为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);
});