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

标签 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);
  });
});

最佳答案

如果你想要全局化的变量是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/

相关文章:

windows - Windows下【Redis 64Bit】能否用于生产环境?

php - JQuery 读取 Cookie 并将其传递给 PHP 变量?

javascript - HTM5 Canvas 绘图应用程序 : How Do I Select The Color?

javascript - Angular Radio 输入在加载 ng 值时未选中

javascript - Next JS 和 Vercel - 开发与生产

mysql - 在Redis中搭建一个 'messages read'类型的队列系统的解决方案?

java - JRedis future 稳定

javascript - 将附加参数绑定(bind)到事件处理程序

javascript - 将文本聊天添加到 webRTC 音频/视频聊天

javascript - Puppeteer 不等到页面加载完成