2013-06-22 65 views
1

我正在尝试使用node.js做一个项目,但遇到了显示变量的问题。更改socket.on中的变量

在客户端侧的这部分代码:

$(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没有改变)。

我该如何解决这个问题?

回答

2

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

你有没有只是事件readrequest,实际上没有改变ab将听众的代码。因此,ab仍然是0,直到执行处理程序,这将在服务器通过read或事件发送时执行。

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

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

});