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

Node.js中从MySQL查询结果返回值显示undefined问题求助

解决Node.js MySQL异步查询返回undefined的问题

你的问题核心是异步操作的执行顺序:db.query是异步函数,它的回调会在数据库查询完成后才执行,但你的getAns函数在回调执行前就已经结束了,所以函数本身没有返回值,调用时自然得到undefined。另外你调用getAns()时没有传uname参数,这也会导致查询条件异常。

下面给你两种可行的解决方式:

方式一:用Promise + async/await(推荐,代码更易读)

先把getAns封装成返回Promise的函数:

const getAns = (uname) => {
  return new Promise((resolve, reject) => {
    const query = "SELECT ans FROM users WHERE username = ?";
    db.query(query, uname, (err, rows) => {
      if (err) {
        reject(err);
      } else {
        // 用可选链?.避免查询不到数据时rows[0]为undefined报错
        resolve(rows[0]?.ans);
      }
    });
  });
};

调用时使用async/await处理异步:

const getData = async () => {
  try {
    // 必须传入用户名参数,比如'xxx'
    const ans = await getAns('xxx');
    console.log(ans);
  } catch (err) {
    console.error('查询出错:', err);
  }
};

getData();

方式二:使用回调函数

修改getAns,让它接受一个回调函数作为参数:

const getAns = (uname, callback) => {
  const query = "SELECT ans FROM users WHERE username = ?";
  db.query(query, uname, (err, rows) => {
    if (err) {
      callback(err);
    } else {
      callback(null, rows[0]?.ans);
    }
  });
};

调用时通过回调获取结果:

const getData = () => {
  // 传入用户名和回调函数
  getAns('xxx', (err, ans) => {
    if (err) {
      console.error('查询出错:', err);
    } else {
      console.log(ans);
    }
  });
};

getData();

注意点

  1. 调用getAns时必须传递uname参数,否则查询条件中的username会是undefined,大概率查不到数据。
  2. 处理数据库查询时要考虑查询不到数据的情况(比如用户名不存在),用rows[0]?.ans可以避免rows[0]为undefined时抛出错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:02:09