1

我有一个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);
    }
});

为什么这个最新if的不能正常工作?谢谢!

4

1 回答 1

3

checkUser正在做某事,但它是异步的。所以,当你在if语句中使用它时,返回undefined的是 false。您应该使用回调来成功编写您的逻辑。IE:

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

checkUser(..., ..., function(result) {
  if(result) {
     // ...
  } else {
     // ...
  }
});
于 2013-11-11T12:46:10.077 回答