如何通过函数更新全局变量

时间:2017-09-30 18:01:32

标签: javascript node.js redis

我一直在尝试使用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);
  });
});

1 个答案:

答案 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);
});