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

如何在非Promise代码中返回Node.js mysql2的query()函数查询结果

问题本质

con.query 是异步执行的API,代码不会等待数据库查询完成再继续执行后续逻辑,回调函数内部的 return 只能把值返回给con.query的内部调用逻辑,无法传递到外层的getUserByEmail函数中,因此不可能让异步函数直接同步返回查询结果,只能通过回调参数接收返回值。

正确的回调版本实现

按照Node.js生态通用的错误优先回调约定编写,代码如下:

function getUserByEmail(email, callback) {
    const sql = `SELECT * FROM userlogin WHERE Username = ?`;
    con.query(sql, email, (err, result) => {
        if (err) {
            // 出错时第一个参数传递错误对象
            return callback(err);
        }
        // 成功时第一个参数传null,第二个参数传递查询结果
        callback(null, result[0]);
    })
}

调用方式

所有依赖查询结果的业务逻辑都必须写在传入的回调函数内部,示例如下:

// 调用时传入回调函数接收结果
getUserByEmail('test@example.com', (err, user) => {
    if (err) {
        // 处理错误逻辑
        console.error('查询用户失败:', err);
        return;
    }
    // 拿到结果后执行后续业务逻辑
    console.log('查询到的用户信息:', user);
})

补充说明

你之前写的Promise版本和回调版本逻辑完全对齐,只是把Promise的resolve/reject替换成了调用传入的callback参数,本质都是通过异步回调机制传递异步操作的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:45:00