Javascript nodejs-sqlite3无法从回调返回

Javascript nodejs-sqlite3无法从回调返回,javascript,node.js,sqlite,callback,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 r

我试图返回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
};
正如您可能从注释中看到的,我的代码返回一个空数组,尽管调用回调时行包含数据

有什么帮助吗?

问题是在调用DB回调之前读取函数返回。read函数还需要接受回调参数,并在发生错误或数据可用时调用它。这是一种常见的节点习惯用法

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

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

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

没有别的办法了吗?我不想用不必要的回调扰乱我的系统,因为你不能从回调中返回,它们都不是不必要的。如果您需要自上而下的过程代码,请使用php。我刚刚尝试了回调,但仍然不起作用。这会导致功能链中更高一级出现完全相同的问题。它必须在某个地方终止,编辑您的问题并发布更新的代码。我敢打赌你调用回调的方式不正确。我用完全相同的方式调用它