节点js在函数内定义var

时间:2015-08-04 11:09:16

标签: node.js

有人可以解释为什么标志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

提前致谢

1 个答案:

答案 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()
    })
})