为什么自定义JS函数可打印MySQL查询结果却无法返回该值
问题根因
你遇到的是Node.js异步回调的典型问题:connection.query属于异步API,你在其回调函数内部写的return results只会将结果返回给回调函数本身,并不会传递到外层的get_non_showing_stores函数。外层函数在数据库查询还没执行完成时就已经运行结束,默认返回undefined,所以你拿不到查询结果。
解决方法
这里提供两种常用的实现方案:
1. 回调函数传值
通过传入回调函数的方式,在查询完成后把结果交给回调处理:
const get_non_showing_stores = (field_name, callback) => { const connection = mysql_conn(); // 建议提前对field_name做白名单校验,避免SQL注入风险 const query = `SELECT * from stores WHERE ${field_name} = 0`; connection.query(query,(err,results) => { if (err) return callback(err); callback(null, results); }); }; // 调用示例 get_non_showing_stores('你要查询的字段名', (err, data) => { if (err) { console.error('查询出错:', err); return; } // 在这里处理查询结果 console.log(data); })
2. Promise + async/await(更推荐)
封装为Promise后可以用async/await语法,代码逻辑更清晰易读:
const get_non_showing_stores = (field_name) => { const connection = mysql_conn(); // 建议提前对field_name做白名单校验,避免SQL注入风险 const query = `SELECT * from stores WHERE ${field_name} = 0`; return new Promise((resolve, reject) => { connection.query(query,(err,results) => { if (err) return reject(err); resolve(results); }); }) }; // 调用示例 async function fetchData() { try { const data = await get_non_showing_stores('你要查询的字段名'); // 在这里处理查询结果 console.log(data); } catch (err) { console.error('查询出错:', err); } } fetchData();
内容的提问来源于stack exchange,提问作者Eldan Shkolnikov
相关产品推荐
相关产品推荐

