nodejs-sqlite3无法从回调中返回

时间:2015-10-09 22:18:17

标签: javascript node.js sqlite callback

我正在尝试返回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
};

正如您可以从注释中看到的那样,我的代码返回一个空数组,尽管rows在调用回调时包含数据。

对此有何帮助?

1 个答案:

答案 0 :(得分:0)

问题是你的read()函数在调用数据库回调之前返回。您的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);
    });
};