最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

运维笔记admin8浏览0评论

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

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

我在异步函数中查询我的数据库(通过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}`);
}
发布评论

评论列表(0)

  1. 暂无评论