编辑:问题得到解答。代码是正确的,只需要迭代结果或单独访问每个元素。
我正在使用 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/