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

为什么自定义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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:45:02