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
相关产品推荐
相关产品推荐

