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

Express中如何使用Promise嵌套MySQL查询 解决pool.query无then方法报错

核心问题原因

  • 你使用的数据库连接池pool默认的query方法是回调风格API,不支持Promise链式调用的then方法,所以第一次报错then is not a function
  • 你手动包裹Promise的写法没有正确处理回调结果,也没有调用resolve/reject,同时catch的参数写法错误,直接传入了console.log()的执行结果,导致无论是否出错都会提前打印报错信息
  • 你在Promise.all的回调中错误调用了result.status(),result是所有异步任务的返回结果数组,不是接口响应对象res

修复步骤

第一步:Promise化query方法

可以用Node.js内置的util.promisify把回调风格的query转成Promise风格,无需更换依赖:

const pool = require("../../config/database");
const { promisify } = require('util');
// 把query转成Promise风格
const query = promisify(pool.query).bind(pool);

如果你用的是mysql2,也可以直接引入promise版本的连接池:const pool = require('mysql2/promise').createPool(你的数据库配置)

第二步:优化代码写法

用async/await语法替代嵌套的then链式调用,可读性更高,也更容易排查错误,同时修正所有语法问题。

修复后完整代码

const pool = require("../../config/database");
const { promisify } = require('util');
const query = promisify(pool.query).bind(pool);

module.exports = {
    seedTypeChecker: async (req, res) => {
        try {
            // 执行第一个查询
            const rows = await query(`
                SELECT id FROM records  
                WHERE type = 'SM1' and member_id 
                NOT IN (SELECT member_id FROM cc_see)
            `);

            // 生成批量更新的Promise列表
            const promiseList = rows.map(row => {
                return query(`
                    UPDATE records set type = ?, see_issue = ? 
                    WHERE id NOT IN (SELECT id FROM clearer) 
                    AND id = ?
                `, ['SM1', '1', row.id]);
            });

            // 等待所有更新完成
            await Promise.all(promiseList);
            console.log("所有更新执行成功");
            res.status(200).json({
                success: 1,
                message: "Query was successful"
            });
        } catch (err) {
            console.error("操作出错:", err);
            res.status(500).json({
                success: 0,
                message: "Database Error"
            });
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:30:03