Websocket不向所有客户端发送数据

时间:2016-03-01 17:49:14

标签: javascript mysql node.js

美好的一天,

我正在使用带有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。在这种情况下,我应该按顺序执行查询还是执行其他操作?

由于

1 个答案:

答案 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);
});