2016-03-01 83 views
0

美好的一天,Websocket不發送數據給所有客戶端

我使用node.js和https://github.com/felixge/node-mysql mysql包。

我這裏有一個腳本,將所有連接的客戶端的數據(至少它應該)

for(var i = 0; i < clients.length; i++) 
{ 
    sql.query("SELECT coins FROM users_steam WHERE steamid="+clients[i].ID,function(err,rows){ 
     if(err) throw err; 
     var bal = rows[0].coins; 

     clients[i].send(JSON.stringify({ 
      'type':'roll', 
      'roundid':ROUND, 
      'places':r, 
      'wait':WAIT, 
      'roundtime':RollTime, 
      'balance':bal 
     })); 
     clients[i].balRefreshes=0; 

    }); 
} 

雖然問題是,我得到TypeError: Cannot call method 'send' of undefined,這意味着該ID不正確分配。我應該按順序執行查詢還是在這種情況下執行其他操作?

感謝

回答

2

,我可以看到的是,因爲你的數據庫調用是異步,並會在以後的時間被調用時,變量「i」將是其在選擇查詢值不同的第一個問題。

例如,嘗試在您的控制檯運行此代碼:

for(var i = 0; i < 100; i++) 
    { 
     setTimeout(function(){ 
      console.log(i) 
     }, 1000); 
    } 

你可以代替試試這個:

clients.forEach(function(client, i){ 
    setTimeout(function(){ 
     console.log(i) 
    }, 1000); 
}); 
+0

是啊,我剛纔注意到,實際上的NodeJS是異步。但我怎麼能這樣做那呢? – Nedas

+0

檢查我的編輯:) – Derek

相關問題