2013-06-22 37 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); 
    }); 

});