Javascript nodejs-sqlite3无法从回调返回
我试图返回SELECT查询的结果,但由于nodejs-sqlite3 api的构造方式,我需要通过回调获取数据。没问题,我的想法和做法如下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
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。我刚刚尝试了回调,但仍然不起作用。这会导致功能链中更高一级出现完全相同的问题。它必须在某个地方终止,编辑您的问题并发布更新的代码。我敢打赌你调用回调的方式不正确。我用完全相同的方式调用它