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

Node.js调用SQLite查询未返回结果问题求助

问题分析与解决方案

你的问题核心是异步操作处理不当——SQLite的sql.get是异步方法,而你的getOne函数没有返回异步操作的Promise,调用时又用同步方式去获取结果,自然拿不到预期数据。

第一步:修复getOne函数,让它返回Promise

你需要让getOne返回整个异步查询的Promise链,这样调用者才能等待查询完成:

getOne: function() {
  // 关键:返回sql.get的Promise
  return sql.get(`SELECT * FROM currency_list order by rowid desc limit 1`)
    .then(row => {
      if (!row) {
        console.log("no data");
        return null; // 可以返回null或者根据需求抛出错误
      } else {
        return row;
      }
    })
    .catch(err => {
      // 务必捕获查询错误,避免未处理的Promise拒绝
      console.error("数据库查询出错:", err);
      throw err; // 把错误抛出去,让调用者也能处理
    });
},

第二步:用异步方式调用getOne

因为getOne现在返回Promise,你需要用async/await或者.then()来等待结果:

方式一:使用async/await(更直观)

module.exports = {
  // 给run方法加上async关键字
  run : async (args, Client, msg, isOwner) => {
    try {
      let results = await db.getOne(); // await等待Promise完成
      console.log("test result =>"+JSON.stringify(results));
    } catch (err) {
      console.error("获取数据失败:", err);
    }
  }
};

方式二:使用.then()链式调用

module.exports = {
  run : (args, Client, msg, isOwner) => {
    db.getOne()
      .then(results => {
        console.log("test result =>"+JSON.stringify(results));
      })
      .catch(err => {
        console.error("获取数据失败:", err);
      });
  }
};

为什么原来的代码不工作?

原来的getOne函数内部虽然有.then(),但函数本身没有返回这个Promise,所以调用db.getOne()时,函数会立即返回undefined,而不是等待数据库查询完成后的结果。JavaScript的异步操作不会阻塞代码执行,所以你的console.log会先执行,这时候results还没拿到数据,自然是undefined。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:54:28