如何在非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
相关产品推荐
相关产品推荐

