我正在尝试查询一个数据库,该数据库在节点服务器上运行而无需使用 sqlite3 表达,以检查一个元素是否在数据库中。在发现此元素是否存在后,它将继续使用此信息访问不同的表。
var username;
checkSessionID(usersSessionID, function(temp) {
username = temp[0].username;
});
var db = new sql.Database("Pete's FCRs.db");
var ps = db.prepare("select * from users where username = ?", errorFunc);
ps.all(username, function(err, rows) {
if (err) throw err;
console.log(rows);
});
ps.finalize();
db.close();
function checkSessionID(sessionID, callback) {
var db = new sql.Database("Pete's FCRs.db");
var ps = db.prepare("select * from sessionIDs where sessionID = ?", errorFunc);
ps.all(sessionID, function(err, rows) {
if (err) throw err;
callback(rows);
});
ps.finalize();
db.close();
}
("test: " + sessionDetails);
1)我运行 checkSessionID 来检查 sessionID 是否在数据库中,在 sessionIDs 表中。2) 接下来,它调用回调函数,存储与会话 ID 关联的用户名。
但是,由于回调是异步的,我在更新“用户名”之前访问数据库。
为了解决这个问题,不能在回调函数中移动数据库查询,因为这会导致错误,因为数据库被锁定。
非常感谢您的帮助。
编辑
通过将 db 声明为全局变量并在所有进程完成后将其关闭来设法解决它。