我正在尝试返回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
在调用回调时包含数据。
对此有何帮助?
答案 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);
});
};