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

如何在MySQL操作中使用Promise的.then方法及async/await语法?

原生mysql模块默认采用回调风格API,不支持直接调用.then(),你可以通过两种方式实现Promise化,支持.then()和async/await语法:

方案1:手动封装Promise(无需额外依赖)

第一步:修改db文件的getAll方法

直接返回Promise实例,在回调中处理成功/失败状态:

module.exports.reqMethods = {
  // GET All Cow Info
  getAll: function () {
    return new Promise((resolve, reject) => {
      connection.query('SELECT * FROM cows;', (err, data) => {
        if (err) return reject(err)
        console.log("DATA: \n", data)
        resolve(data)
      })
    })
  }
}

第二步:修改服务端调用逻辑

方式A:.then() + .catch() 写法

app.get('/api/cows', (req, res) => {
  db.reqMethods.getAll()
    .then(data => res.send(data))
    .catch(() => res.send('Error'))
})

方式B:async/await 写法(更简洁)

app.get('/api/cows', async (req, res) => {
  try {
    const data = await db.reqMethods.getAll()
    res.send(data)
  } catch (err) {
    res.send('Error')
  }
})

方案2:使用mysql2模块(原生支持Promise,推荐生产环境使用)

mysql2是兼容mysqlAPI的增强版本,自带Promise支持,无需手动封装:

  1. 安装依赖
    npm install mysql2
  2. 修改db文件配置
// 引入mysql2的Promise版本
const mysql = require('mysql2/promise');

// 推荐使用连接池,性能优于单连接
const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'cowlist',
  connectionLimit: 10 // 连接池最大连接数
});

module.exports.reqMethods = {
  // 直接返回query结果,本身就是Promise实例
  getAll: async function () {
    const [data] = await pool.query('SELECT * FROM cows;')
    return data
  }
}

服务端调用逻辑和方案1完全一致。

内容的提问来源于stack exchange,提问作者Ronny Fitzgerald

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:45:04