在socket.on中更改变量

时间:2013-06-22 14:53:31

标签: javascript jquery node.js socket.io

我正在尝试使用node.js进行项目,但是我遇到了显示变量的问题。

客户端的这部分代码:

$(document).ready(function () {
    var socket = io.connect('http://localhost:8000');
    var a = 0;
    var b = 0;

    socket.on('request', function (data) {
        a = data;
    });

    socket.on('read', function (data) {
        b = data;
    });

    var q = a * b;
    $('span#calculate').html(q);

    // Etc...
});

通常它应该显示此计算的结果,但它仍然显示0(这意味着变量在socket.on中没有变化。)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

欢迎来到异步代码的世界!没有任何东西线性运行。

您所拥有的代码只是为事件readrequest 添加侦听器,而不是实际更改ab。因此,ab仍然是0,直到执行处理程序,这将是服务器通过readrequest事件发送的时间。

您可以做的是在事件触发后放置您想要发生的任何事情。然后在事件处理程序中调用该函数:

$(document).ready(function () {
  var socket = io.connect('http://localhost:8000');
  var a = 0;
  var b = 0;
  var calculate = $('span#calculate');

  function recalculate(q) {

    calculate.html(q);

    //more...    
  }

  socket.on('request', function (data) {
    a = data;
    recalculate(a * b);
  });

  socket.on('read', function (data) {
    b = data;
    recalculate(a * b);
  });

});