gpt4 book ai didi

javascript - 在异步函数中等待 MySQL 查询?

转载 作者:行者123 更新时间:2023-11-30 21:55:11 25 4
gpt4 key购买 nike

我在异步函数中查询我的数据库(通过 mysql 库),但我似乎无法让我的函数正确地等待查询完成后再继续。

代码:

async (eventName, eventArgs, app) => {

...

prefix = "!";

if(msg.channel.type !== "dm")
database.query(`SELECT prefix FROM guilds WHERE \`id\`=${msg.guild.id}`, (err, res) => {
if(err)
return console.error("db", `${err.message}`);

if(res.length > 0)
if(res[0].prefix)
prefix = res[0].prefix;

console.log(`from within callback ${prefix}`);
console.log(`returned from query ${res[0].prefix}`);
});

console.log(`prefix in standard flow ${prefix}`);

...

}

控制台输出如下:

prefix in standard flow !
from within callback -
returned from query -

所有 3 个都应该输出 -,但在查询回调之外它是 !。看起来我的异步函数在继续之前没有等待查询回调函数完成,这不是范围问题。

我也试过 awaiting database.query 函数,但无济于事。

最佳答案

使用async/await:

async (eventName, eventArgs, app) => {
let prefix = '!';
const query = new Promise((resolve, reject) => {
database.query(`SELECT prefix FROM guilds WHERE \`id\`=${msg.guild.id}`, (err, res) => {
if(err)
return reject("db", `${err.message}`);

if(res.length > 0 && res[0].prefix)
prefix = res[0].prefix;

console.log(`from within promise ${prefix}`);
console.log(`returned from query ${res[0].prefix}`);
resolve();
});
});

await query;
console.log(`prefix in standard flow ${prefix}`);
}

关于javascript - 在异步函数中等待 MySQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45512745/

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