JS中SQLite3查询函数因异步返回undefined的问题求助
问题分析
你的问题核心是JavaScript异步代码的执行顺序:
find_info函数本身没有任何返回语句,所以默认返回undefineddb.all是异步方法,它的回调函数会在SQL查询完成后才执行,而find_info会先执行完并返回,此时回调里的return rows根本不会影响外层函数的返回值——你之前尝试存变量也没用,因为变量赋值是在异步回调里,函数返回时变量还没被赋值。
解决方案
下面给两种常用的解决方式:
方式1:使用回调函数(基础异步处理)
修改函数让它接收一个回调参数,在查询完成后通过回调传递结果或错误:
function find_info(callback) { db.all('SELECT * FROM test', (err, rows) => { if (err) { console.log('error in search information'); return callback(err); } callback(null, rows); }); } // 调用示例 find_info((err, data) => { if (err) { // 这里处理错误 return; } console.log(data); // 这里就能拿到查询结果 });
方式2:用Promise + async/await(现代写法,可读性更高)
把异步查询封装成Promise,再用async/await以同步写法处理异步:
function find_info() { return new Promise((resolve, reject) => { db.all('SELECT * FROM test', (err, rows) => { if (err) { console.log('error in search information'); reject(err); return; } resolve(rows); }); }); } // 调用方式1:用async/await async function getQueryResult() { try { const data = await find_info(); console.log(data); } catch (err) { // 处理错误 } } getQueryResult(); // 调用方式2:用.then().catch() find_info() .then(data => console.log(data)) .catch(err => console.error(err));
内容的提问来源于stack exchange,提问作者Lotti
相关产品推荐
相关产品推荐

