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

我也试过 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/

相关文章:

无法从子进程的标准输出中获取任何内容

javascript - 第二次单击按钮没有获取新的表单字段值

javascript - jssor 目标幻灯片在另一个页面/文档中

javascript - 如何在 setTimeout JavaScript 之后触发操作

mysql - 在选择 PDO 中过滤日期时间以显示现在的结果

php - 使用php从mysql导出电子邮件,但导出我所有的php页面

php - 在 PHP 中获取重命名的文件名

javascript - 仅从特定页面自动重定向 - Rails

node.js - 如何避免 Node 中的单例

sql - Sequelize findAll 多对多条件