javascript - Websocket 未向所有客户端发送数据

标签 javascript mysql node.js

美好的一天,

我正在使用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 没有正确分配。在这种情况下我应该按顺序执行查询还是做其他事情?

谢谢

最佳答案

我看到的第一个问题是,由于您的数据库调用是异步的并且稍后会被调用,因此变量“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);
});

关于javascript - Websocket 未向所有客户端发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35729856/

相关文章:

mysql - 修复mysql中的长度数字

node.js - 如何在 NodeJS (Linux) 中将日志写入文件?

javascript - 为什么 Winstonjs ExceptionHandler 会消除我的 Node 错误?

javascript - 互联网浏览器 : Issue with Overlay/opacity

具有保证数据集的 Mysql GROUP BY

javascript - 从数组中删除时以编程方式取消选中 AngularJS 中的 ng-checkbox

mysql - 从laravel 4中的json数组获取元素

node.js - 一种高效地逐一检查集合中所有数据的方法(nodejs、mongoose)

javascript - 上传和保存图像 onclick of image

javascript - Fullcalendar 显示提前 1 小时的事件