gpt4 book ai didi

mysql - Discord.js/node.js 让代码等待 sql 查询返回结果

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

我正在开发一个discord.js 机器人,并且我正在数据库中的各种服务器上存储大量信息。问题是,代码不等待数据库返回结果。在当前情况下,我正在尝试检查服务器特定前缀是否 checkout 。

我尝试在不同的地方使用asyncawait,但这些都不起作用。如果可以的话,我宁愿不使用 .then(),因为我真的不想将所有命令放在 .then() 中。

const { Client, Attachment, RichEmbed } = require('discord.js');
const client = new Client();
const mysql = require("mysql");
const config = require("./config.json")

var con = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'botdb'
})

client.on("ready", () => {
console.log("I'm ready")
})

client.on("message", message => {
if (message.author.bot) return;
if (message.channel.type === 'dm') return;

let msg = message.content.split(" ");
let command = msg[0];
let prefix;

con.query(`SELECT * FROM serversettings WHERE ServerID = ${message.guild.id}`, (err, rows) => {
if (err) throw err;
prefix = rows[0].Prefix;
console.log(prefix)
})

console.log(`Prefix: ${prefix}, Command: ${command}`)
if (command === `${prefix}examplecommand`) {
//Do something
}
//Other code that uses prefix and command
}

它应该首先记录前缀,然后是 Prefix: ${prefix}, Command: ${command} 部分,但它以相反的方式执行,因此 examplecommand 不会工作。

最佳答案

您的结果是由于查询回调之外的内容在调用后立即执行而导致的。请记住 mysql 模块是基于回调的。

可能的解决方案

  • 将代码放置在回调中,以便在查询完成时执行。
  • 将查询包装在 Promise 中并等待它。

    function getGuild(guildID) {
    return new Promise((resolve, reject) => {
    con.query(`SELECT * FROM serversettings WHERE ServerID = '${guildID}', (err, rows) => {
    if (err) return reject(err);

    resolve(rows);
    });
    });
    }

    const [guild] = await getGuild(message.guild.id) // destructuring 'rows' array
    .catch(console.error);

    console.log(guild.prefix);
  • 使用基于 Promise 的 MySQL 包装器版本,例如 promise-mysql 。您可以像上面的代码一样使用它,而不必担心编写自己的 Promise。

    const [guild] = await con.query(`SELECT * FROM serversettings WHERE serverID = '${message.guild.id}'`)
    .catch(console.error);

    console.log(guild.prefix);

关于mysql - Discord.js/node.js 让代码等待 sql 查询返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56510323/

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