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

原文 标签 javascript mysql node.js asynchronous

我在异步函数中查询我的数据库(通过 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使用 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/

相关文章:

javascript - Electron js应用程序构建后无法正常工作

node.js - Action 必须是普通对象。使用自定义中间件进行异步操作。如何解决这个问题

javascript - 如何将jquery库和js文件加载到wordpress主题中?

javascript - 如何使用Ruby on Rails将经度和纬度标记保存到mysql数据库中

node.js - 由于 zone.js,Angular7 在 Google Page Speed 上的性能下降

php - PHP-每天计算SQL结果

php - 如何使用PHP和Mysql检查数据库中是否已存在相同的标签?

javascript - 为什么ng-click无法发送括在大括号{{}}中的函数参数?

javascript - 插入的代码产生意外结果

javascript - Socket.IO - 如何替换客户端上的事件监听器