You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:27:01