我在异步函数中查询我的数据库(通过 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 个都应该输出 -
,但在查询回调之外它是 !
。看起来我的异步函数在继续之前没有等待查询回调函数完成,这不是范围问题。
我也试过 await
ing 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/