2016-03-01 48 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

相关问题