JavaScript,if语句始终只执行';其他';分支

JavaScript,if语句始终只执行';其他';分支,javascript,couchdb,Javascript,Couchdb,我有一个if语句来测试函数调用返回的值。 即使该值为true,它也始终执行else分支 我的代码: var debug = { enable: true, log: function(msg, tag){ if(this.enable) console.log((tag?"["+tag+"] ":"") + msg); } }; var checkUser = function(urlServer, user){ $.couch.

我有一个
if
语句来测试函数调用返回的值。 即使该值为
true
,它也始终执行
else
分支

我的代码:

var debug = {
    enable: true,
    log: function(msg, tag){
        if(this.enable)
        console.log((tag?"["+tag+"] ":"") + msg);
    }
};

var checkUser = function(urlServer, user){
    $.couch.urlPrefix = urlServer;
    $.couch.login({
        name: user.name,
        password: user.password,
        success: function(data){
            debug.log("l'utente " + user.name + "è già registrato sul server", "checkUser");
            $.couch.logout({
                success: function(data){
                    debug.log("logout utente: OK", "checkUser");
                    debug.log(data);
                },
                error: function(data){
                    debug.log("logout utente: FAIL", "checkUser");
                    debug.log(data);
                }
            });
            return true
        },
        error: function(err){
            debug.log("l'utente " + user.name + " NON è registrato sul server", "checkUser");
            return false;
        },
        async: false
    });
};

// ... code ...

$("input").on("click", function(){
    if( checkUser(urlCouchDbServer, user) ){
        console.log("dopo il controllo l'utente risulta registrato");
    }else{
        console.log("dopo il controllo l'utente NON risulta registrato");
        sigupUser(urlCouchDbServer, user);
    }
});
如果不能正常工作,为什么最新的

谢谢

checkUser
正在执行某些操作,但它是异步的。因此,当您在
if
语句中使用它时,返回
undefined
,这是false。您应该使用回调成功地编写逻辑。即:

var checkUser = function(urlServer, user, callback) {
    // do something
    callback(true);
}

checkUser(..., ..., function(result) {
  if(result) {
     // ...
  } else {
     // ...
  }
});

您的
checkUser()
不会返回任何内容,而且
undefined
被解释为falsy,它执行
else
部分。我建议使用延迟以使代码更易于管理,但这只是技术问题