有人可以解释为什么标志var没有重新定义吗?我根据选择结果更改标记值
var db = new sqlite3.Database(my.db','OPEN_READONLY');
flag = 0;
db.serialize(function(){
db.get("select id from table where id = ?", [id], function(err, row) {
flag = 1;
if (err) {
console.log(err);
} else {
flag = 2;
}
});
console.log(flag);
db.close();
});
flag var的输出为0,但是,我需要1或2
提前致谢
答案 0 :(得分:2)
这是因为执行是“异步”而不是顺序执行。记录flag
变量后,将执行匿名回调函数。
你应该在回调中使用flag。
var db = new sqlite3.Database(my.db','OPEN_READONLY');
function foo(flag) {
if (flag == 1) {
//no errors
} else if (flag == 2) {
//handle errors
}
}
db.serialize(function(){
db.get("select id from table where id = ?", [id], function(err, row) {
flag = 1;
if (err) {
console.log(err);
}
else {
flag = 2;
}
foo(flag);
db.close()
})
})