我需要幫助,使我的JavaScript異步,因爲我從節點的數據庫查詢。我使用node.js和socket.io。如果我使用setTimeout()函數,代碼將起作用,但我想讓代碼更可靠,所以我試圖實現回調。但是,我不知道如何在回調函數中正確使用「socket.on()」。我認爲問題是我嵌套socket.on調用和第二個「socket.on()」調用不執行。任何幫助將不勝感激,謝謝。異步socket.io javascript回調不起作用
/*server side*/
socket.emit(variable1);//not important
socket.emit(variable2);//not important
//code above isn't important, I just wanted to show how data is used from my queries
/*client side*/
var socket = io.connect('123.456.789.123:3000');
var data = " ";//data I need to pass around
socket1(data, function(){
socket2(data)
});
function socket1(data, callback) {
socket.on('variable1', function (data) {
console.log("1");
callback();
}, callback)
}
function socket2(data) {
console.log("2");
socket.on('variable2', function (data) {
console.log("3");
})
}
的輸出爲「12」 和應爲「123」
嘿,感謝您的深入解釋!我的服務器代碼只能發出一次,因爲它在從數據庫中進行查詢之後就這樣做了。我按照指定的方式實現了我的代碼,並且輸出正在打印,但方法以錯誤的順序打印出來(2,1)。有沒有辦法確保registerVariable1()在調用registerVariable2()之前執行並完全結束?這就是我想要實現的,也許服務器端是問題,但我不能多次查詢,因此每個處理程序只能有一組數據發射。希望這是有道理的。再次感謝! – 2014-08-31 01:47:07
這聽起來像你的問題不是服務器端,它是客戶端。這聽起來像是當你發佈數據庫時你有所有數據,所以你可以在JSON對象中發射它,然後分別處理這些數據,不是嗎? – jmort253 2014-08-31 01:48:41
換句話說,'socket.emit({varOne:dataForVar1Here,varTwo:dataForVar2Here});'一次發送所有數據,就是我所說的...... – jmort253 2014-08-31 01:49:26