Javascript 如何向游戏协调员发送多个请求?
我正在使用节点globaloffensive库,希望向gc发送多个请求,以从数据库中的每个用户处获取每个排名。用我当前的代码,它会重复一遍,而我只收到一个请求。你知道我如何发送和接收每个个人资料吗 我当前的代码:Javascript 如何向游戏协调员发送多个请求?,javascript,node.js,Javascript,Node.js,我正在使用节点globaloffensive库,希望向gc发送多个请求,以从数据库中的每个用户处获取每个排名。用我当前的代码,它会重复一遍,而我只收到一个请求。你知道我如何发送和接收每个个人资料吗 我当前的代码: const SteamUser = require('steam-user'); const SteamTotp = require('steam-totp'); const GlobalOffensive = require('globaloffensive'); const con
const SteamUser = require('steam-user');
const SteamTotp = require('steam-totp');
const GlobalOffensive = require('globaloffensive');
const config = require('./config');
const db = require('./database');
var SteamID = require('steamid');
var mysql = require('mysql');
let user = new SteamUser();
let csgo = new GlobalOffensive(user);
csgo.on('debug', console.log);
user.on('error', console.error);
var pool = mysql.createPool({
supportBigNumbers: true,
bigNumberStrings: true,
connectionLimit: 10,
host: db.host,
user: db.user,
password: db.password,
database: db.dbname
});
const logInOptions = {
accountName: config.accountName,
password: config.password
}
user.logOn(logInOptions);
user.on('loggedOn', res => {
console.log("Logged into Steam as " + user.steamID.getSteam3RenderedID());
user.setPersona(SteamUser.EPersonaState.Online);
user.gamesPlayed(730);
});
csgo.on("connectedToGC", function() {
console.log("connectedToGC");
const checkData = setInterval(()=>{
//Check connection to game coordinator
if ( csgo.haveGCSession ) {
//Check Database
pool.getConnection(function(err, connection) {
if (err) throw err;
connection.query("SELECT * FROM Users WHERE (MainSteamGroup = '1' || CommunitySteamGroup = '1' || vip = '1') && BotInFriendlist = '1'", function (err, rows, fields) {
connection.release();
if (err) throw err;
rows.forEach( (row) => {
var account_id = new SteamID(`${row.SteamID64}`);
//Request Data from CS:GO
csgo.requestPlayersProfile(account_id, function(data) {
console.log(data);
console.log("before");
setTimeout(function(){
//do what you need here
}, 2000);
console.log("after");
});
});
});
});
};
}, 10000);
});
日志:
这里有几个问题-
中的回调类型函数的工作方式与您期望的不一样。使用forEach
或Promise.all
for..of
支持promise,因此无需使用回调样式使事情变得复杂和难以阅读mssql
- 将回调样式转换为promise
function getRequestPlayer(account_id) {
return new Promise((resolve, reject) => {
csgo.requestPlayersProfile(account_id, function (data) {
console.log(data);
resolve(data);
});
});
}
csgo.on("connectedToGC", async function () {
console.log("connectedToGC");
// Check connection to game coordinator
if (csgo.haveGCSession) {
// Check Database
const connection = await pool.getConnection();
const rows = await connection.query("SELECT * FROM Users WHERE (MainSteamGroup = '1' || CommunitySteamGroup = '1' || vip = '1') && BotInFriendlist = '1'");
await Promise.all(rows.map(row => {
const account_id = new SteamID(`${row.SteamID64}`);
return getRequestPlayer(account_id);
}));
}
});
你可能需要在这里和那里调整一些事情,但你会得到一个想法。希望这有帮助我已经试过了,但是设置间隔不起作用。如果不使用setInterval,则会出现以下错误:
function getRequestPlayer(account_id) {
return new Promise((resolve, reject) => {
csgo.requestPlayersProfile(account_id, function (data) {
console.log(data);
resolve(data);
});
});
}
csgo.on("connectedToGC", async function () {
console.log("connectedToGC");
// Check connection to game coordinator
if (csgo.haveGCSession) {
// Check Database
const connection = await pool.getConnection();
const rows = await connection.query("SELECT * FROM Users WHERE (MainSteamGroup = '1' || CommunitySteamGroup = '1' || vip = '1') && BotInFriendlist = '1'");
await Promise.all(rows.map(row => {
const account_id = new SteamID(`${row.SteamID64}`);
return getRequestPlayer(account_id);
}));
}
});