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

Nodejs中用async/await调用pool.query无法获取MySQL查询结果求助

问题原因

你使用的mysql库原生仅支持回调风格API,没有内置Promise适配,直接对pool.query()使用await不会等待查询执行返回结果,只会返回库内部的Query实例对象,也就是你打印输出的内容。

解决方案

方案1:更换为mysql2库(推荐)

mysql2完全兼容mysql的所有API,同时原生支持Promise语法,改动成本极低:

  • 安装依赖:
    npm install mysql2
  • 将数据库连接部分的引入逻辑替换为mysql2/promise即可,原有创建连接池、查询的逻辑不需要改动:
// 替换原有引入mysql的代码
const mysql = require('mysql2/promise')
// 原有创建连接池的逻辑保持不变
const pool = mysql.createPool({
  // 你的数据库配置项
})

修改完成后你现有的query函数就可以正常返回查询结果。

方案2:手动封装Promise适配

如果你不想更换依赖,可以手动将查询方法封装为Promise形式:

const query = async (table, fields ) => {
    try {
        return new Promise((resolve, reject) => {
          pool.query('SELECT * FROM country limit 1', (error, results) => {
            if (error) return reject(error)
            resolve(results)
          })
        })
    } catch(err) {
        throw err
    }
}

注:原有代码中你在catch块直接return err,会导致上层await无法感知异常,建议改为throw err,上层通过try catch捕获错误即可。

内容的提问来源于stack exchange,提问作者Sivagopal Manpragada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:36:04