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

使用async/await调用MariaDB仍返回undefined,查询结果无法传递

问题本质

你遇到的问题核心是getSensorData()函数没有返回数据库查询的结果。虽然函数内部能通过控制台打印出数据,但没通过return语句把结果传递给外部调用者,所以外部用await接收时自然得到undefined。

修复方案

根据你的数据库代码风格,对应两种修复方式:

1. 回调风格的数据库操作(需包装为Promise)

如果你的查询用的是回调函数,必须把整个逻辑包装成Promise,在回调里通过resolve返回结果:

function getSensorData() {
  return new Promise((resolve, reject) => {
    // 示例数据库查询代码
    db.query('SELECT * FROM sensor_data', (err, results) => {
      if (err) {
        console.error(err);
        reject(err);
        return;
      }
      console.log(results); // 内部打印结果
      resolve(results); // 关键:把结果返回给调用者
    });
  });
}

2. Promise/async风格的数据库操作

如果用的是支持Promise的MariaDB库(比如官方mariadb包),直接return查询结果即可:

async function getSensorData() {
  try {
    const conn = await db.getConnection();
    const results = await conn.query('SELECT * FROM sensor_data');
    conn.release();
    console.log(results); // 内部打印结果
    return results; // 关键:返回结果
  } catch (err) {
    console.error(err);
    throw err; // 抛出错误让路由层处理
  }
}
路由调用示例

修复后,路由里就能正常获取数据并渲染视图了:

app.get('/sensor', async (req, res) => {
  try {
    const sensorData = await getSensorData();
    res.render('sensor-page', { data: sensorData });
  } catch (err) {
    res.status(500).send('数据获取失败');
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 11:17:07