nodejs-sqlite3 无法从回调中 return

nodejs-sqlite3 can't return from callback

我正在尝试 return SELECT 查询的结果,但是由于 nodejs-sqlite3 api 的构造方式,我需要去通过回调的数据。没问题,我想和做了如下。

var selectAllQuery =
        'SELECT * FROM challenge',
    selectQuery =
        'SELECT * FROM challenge WHERE signature = $signature';

exports.read = function (sig) {
    var result = [],
        callback = function(err, rows) {
            result = rows; // rows contains 3 items
        };

    db.serialize(function () {
        if (sig) db.all(selectQuery, {$signature: sig}, callback);
        else db.all(selectAllQuery, callback);
    });
    console.log(result); // prints []
    return result; // array is empty
};

正如您可能从评论中看到的那样,我的代码 return 是一个空数组,尽管调用回调时 rows 包含数据。

有什么帮助吗?

问题出在您的 read() 函数 returns 调用数据库回调之前。您的 read() 函数还需要接受一个回调参数,并在发生错误或数据可用时调用它。这是一个常见的 Node 习语。

更新 1 -- 您需要执行如下操作:

exports.read = function (sig, callback) {
    var result = [];

    db.serialize(function () {
        if (sig) db.all(selectQuery, {$signature: sig}, callback);
        else db.all(selectAllQuery, callback);
    });
};