javascript - 使用 Promise/resolve 和 async/await 从函数返回 MySql 结果

标签 javascript mysql asynchronous promise async-await

编辑:问题得到解答。代码是正确的,只需要迭代结果或单独访问每个元素。

我正在使用 MySql 编写一个 Discord 机器人。我需要先检查表中用户是否存在,然后才能进行其他处理。主体(此处未显示)建立连接并收集用户命令,调用适当的模块。在这种情况下,args[0] 将具有用于搜索表的值。 promise 和等待行的时间似乎是正确的,因为在 testUser 返回后打印“结果”。但是,结果返回 [object Object] 而不是行(表不为空)。函数内的resolve(rows)不应该返回选定的行吗?如果不需要的话,我会尽量避免添加额外的模块。

const discord = require("discord.js");
const mySql = require("mysql");

module.exports.run = async (bot, message, args, conn) => {

const results = await testUser(args[0], conn);
console.log("Results: " + results);
}

function testUser(userName, conn) {
    return new Promise((resolve, reject) => {
        conn.query(`SELECT * FROM user_master WHERE user_name = 
    '${userName}'`, (err, rows) => {
            if(err) reject(err);
            else resolve(rows);
        });
    });
}

最佳答案

返回的Object包含查询结果,可以按照注释中提到的方式进行查询。举一个完整的例子,这将是您的代码,包括循环返回的结果:

const discord = require("discord.js");
const mySql = require("mysql");

module.exports.run = async (bot, message, args, conn) => {

  const results = await testUser(args[0], conn);
  results.forEach((row) => { 
    console.log(row); 
  });
}

function testUser(userName, conn) {
    return new Promise((resolve, reject) => {
        conn.query(`SELECT * FROM user_master WHERE user_name = 
    '${userName}'`, (err, rows) => {
            if(err) reject(err);
            else resolve(rows);
        });
    });
}

关于javascript - 使用 Promise/resolve 和 async/await 从函数返回 MySql 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54944300/

相关文章:

javascript - 如何在Javascript中获取图像主体?

javascript - 将 Javascript 确认消息框标签从"is"重命名为“继续”

php - 000webhost 服务网站数据库错误

javascript - AWS Lambda 上的 promise 得到解决后,.then 不会运行

javascript - 如何将数组中的 json 插入 highcharts?

javascript - 使用 Javascript/jQuery 创建摘录

mysql - Laravel 5.1 Eloquent 慢动作

mysql - 在MySql中添加记录

c++ - 异步函数错误

javascript - 链接异步方法调用 - javascript