2

我正在尝试使用 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)。

我怎么解决这个问题?

4

1 回答 1

3

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

您那里的代码只是为事件添加侦听器readandrequest,而不是实际更改aand b。因此,a直到处理程序b0执行,这将是服务器发送readorrequest事件的时候。

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

$(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);
  });

});
于 2013-06-22T14:57:11.980 回答