美好的一天,
我正在使用带有https://github.com/felixge/node-mysql mysql包的node.js。
我这里有一个脚本,它向所有连接的客户端发送他们的数据(至少应该是这样)
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。在这种情况下,我应该按顺序执行查询还是执行其他操作?
由于
答案 0 :(得分:2)
我可以看到的第一个问题是,由于您的数据库调用是异步的并且稍后会被调用,因此变量“i”将与其在select查询中的值不同。
例如,尝试在控制台中运行此代码: for(var i = 0; i < 100; i++)
{
setTimeout(function(){
console.log(i)
}, 1000);
}
您可以尝试这样做:
clients.forEach(function(client, i){
setTimeout(function(){
console.log(i)
}, 1000);
});