gpt4 book ai didi

mysql - 无法从函数返回

转载 作者:行者123 更新时间:2023-11-29 09:41:41 26 4
gpt4 key购买 nike

所以我想做的是,创建一个函数,使用 mysql(不关心如何,但我找到了一个 npm,所以现在使用它。)从我的数据库获取信息,然后提供我的 json用它。只要 console.log() 位于正确的位置,它就可以正常工作,但我必须返回它,所以我必须将其进一步向下移动。但是当我这样做时,它不会显示在我需要它的其他文件中。

我有两个基本相同的脚本,一个只是针对另一个派系的。- 所以我只会展示一个,就好像我找到其中之一的解决方案一样,我对两者都有解决方案。

get_ally_online_players: function (guild) {

con.query("SELECT * FROM user_dbs WHERE guild='"+ guild +"'", function (err, result, fields) {

var con2 = mysql.createConnection({
host: result[0].host,
user: result[0].username,
password: result[0].password,
database: result[0].database
})


con2.connect()

con2.query("SELECT * FROM characters WHERE online='1' AND race=1 OR race=3 OR race=4 OR race=7 OR race=11", function (err, result, fields) {
allycount = 0
console.dir(result)
result.forEach(function(result) {
allycount = allycount+1
})
return allycount

});
con2.end()
});
}

这是我尝试的地方:

        if(recieved.content === "!status")
{

var horde_players
var ally_players
horde_players == guilddb.get_horde_online_players("585919060722712670")
ally_players == guilddb.get_ally_online_players("585919060722712670")
console.log(guilddb.test())
//console.log(ally_players)
recieved.channel.send(ally_players + " : " + horde_players)
}

我已经尝试了很多事情...我还读到您必须使用回调,因为它显然运行得太快,就像它之前无法查询...不过,我想远离回调,因为在脚本内部似乎很麻烦。但如果绝对有必要,那就这样吧。顺便说一句,它返回“未定义”。我也尝试过使用 Promise 并添加 setTimeout 函数等。

最佳答案

首先,对我的英语感到抱歉。

实际上你犯了一些错误。

您在为 horde_playersally_players 值分配值时犯了错误

if (recieved.content === "!status") {
var horde_players
var ally_players
horde_players = guilddb.get_horde_online_players("585919060722712670")
ally_players = guilddb.get_ally_online_players("585919060722712670")
console.log(guilddb.test())
//console.log(ally_players)
recieved.channel.send(ally_players + " : " + horde_players)
}

使用 (==),您是在比较值,而不是设置。

现在我们来谈谈异步操作。

我准备了一个例子。这就像您的情况一样,您正在尝试运行两个可能在不同时间完成的异步操作,但您需要在运行其他操作之前完成这两个操作。尝试运行它:

function async1(id, callback) {
setTimeout(function() {
callback('The user with ' + id + ' is called Sergio');
}, 6000);
}

function async2(id, callback) {
setTimeout(function() {
callback('The user with ' + id + ' is called Jack');
}, 2000);
}

var result1;
var result2;

async1(1, function(result) {
result1 = result;
});

async2(2, function(result) {
result2 = result;
});
console.log('Finished result: ' + result1 + result2); // Finished result: undefined undefined

最终结果是在完成两个异步操作之前运行的。 不好...

使用回调,我们需要嵌套函数(如果必须执行更多异步操作,可能会导致回调 hell )

function async1(id, callback) {
setTimeout(function() {
callback('The user with ' + id + ' is called Sergio');
}, 6000);
}

function async2(id, callback) {
setTimeout(function() {
callback('The user with ' + id + ' is called Jack');
}, 2000);
}

var result1;
var result2;

async1(1, function(result) {
result1 = result;

async2(2, function(result) {
result2 = result;
console.log('Finished result: ' + result1 + result2); // 'Finished result: The user with 1 is called SergioThe user with 2 is called Jack
});
});

对于你的情况,这将是我的解决方案。也许我会改进更多的东西,比如使用 const-let 和 ES6 功能(async-await、箭头函数...)、通过参数传递数据库连接器...但也许你现在更容易理解

var guilddb = {
get_horde_online_players: function(guild, callback) {
callback('Implement me!');
},
get_ally_online_players: function(guild, callback) {
con.query("SELECT * FROM user_dbs WHERE guild='" + guild + "'", function (err, result, fields) {
var con2 = mysql.createConnection({
host: result[0].host,
user: result[0].username,
password: result[0].password,
database: result[0].database
});

con2.connect();

con2.query("SELECT * FROM characters WHERE online='1' AND race=1 OR race=3 OR race=4 OR race=7 OR race=11", function (err, result, fields) {
var allycount = 0;
console.dir(result);
result.forEach(function(result) {
allycount = allycount+1
});

con2.end();
callback(allycount);
});
});
}
}

if (recieved.content === "!status") {
guilddb.get_horde_online_players("585919060722712670", function(result) {
var horde_players = result;

guilddb.get_ally_online_players("585919060722712670", function(result) {
var ally_players = result;
console.log(guilddb.test());
console.log(ally_players);
recieved.channel.send(ally_players + " : " + horde_players);
});
});
}

希望有帮助。

关于mysql - 无法从函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56498328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com