Discord.js开发机器人调用MySQL查询接口返回undefined问题求助
问题原因
- 你使用的
mysql库的db.query是异步回调式API,回调函数内部的return只会将值返回给回调函数本身,不会作为外层getTicketNumber函数的返回值。 getTicketNumber执行时不会等待数据库查询完成,会直接返回默认值undefined,等数据库结果返回的时候,调用函数的逻辑已经执行完毕,自然拿不到返回值。
修复方案
第一步:将数据库查询方法封装为Promise
改写getTicketNumber返回Promise对象,支持后续用async/await获取异步结果:
// 修改后的数据库文件getTicketNumber方法 module.exports.getTicketNumber = () => { return new Promise((resolve, reject) => { db.query(`SELECT * FROM tickets WHERE botId = '861586919653638145'`, (err, number) => { if (err) { console.log(err) return reject(err) } if (number?.length) { resolve(number[0].ticketNumber) } else { // 无匹配数据时可按需返回默认值 resolve(0) } }) }) }
第二步:改写命令回调为异步函数
用async标记回调函数,用await等待数据库查询结果返回后再发送消息:
// 修改后的命令代码 const database = require('@features/database.js') module.exports = { commands: 'testdb', callback: async (message) => { try { const ticketNumber = await database.getTicketNumber() message.channel.send({ content: `${ticketNumber}` }) } catch (e) { console.error('数据库查询错误:', e) message.channel.send({ content: '查询失败,请稍后重试' }) } }, }
内容的提问来源于stack exchange,提问作者Codexis
相关产品推荐
相关产品推荐

