Socket.io无法在socket.on中更改全局变量

时间:2013-08-21 19:14:48

标签: node.js socket.io global

我使用Node.js,Express和socket.io。

我无法在socket.on函数中更改全局变量。

这很奇怪,因为我之前设法做到了,但现在它出了问题,我不知道为什么。 有一个简单的答案,但它不起作用:16270997

你能帮我吗?


服务器:

   var express = require('express');
   var app = express.createServer();
  app.use(express.static(__dirname + '/public/tank/'));
  var server = app.listen(8080);

  var socket = require("socket.io");
  var io = socket.listen(server);

  io.sockets.on('connection', function (socket) {
      socket.emit('con');
   });

客户:

<script type="text/javascript" src="/socket.io/socket.io.js"></script>
<script type="text/javascript">
var socket = io.connect();  
var id = 1;

socket.on('con', function () {
   id++;
   alert(id); // it displays 2
});

alert(id);  // it displays 1

</script>

1 个答案:

答案 0 :(得分:3)

即使在收到alert消息并执行con之前,您也会触发外部id++

您可以通过

进行检查
var socket = io.connect();  
var id = 1;

socket.on('con', function () {
   id++;
   alert(id); // it displays 2
   printGlobalIdvalue(); // prints global variable
});

function printGlobalIdvalue() {
    alert(id);  // it also displays 2
}