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