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

JS中SQLite3查询函数因异步返回undefined的问题求助

问题分析

你的问题核心是JavaScript异步代码的执行顺序:

  • find_info函数本身没有任何返回语句,所以默认返回undefined
  • db.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:30:06