JavaScript,if语句总是只执行'else'分支

时间:2013-11-11 12:40:11

标签: 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.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无效? 谢谢!

2 个答案:

答案 0 :(得分:3)

checkUser正在做某事,但它是异步的。因此,当您在if语句中使用它时返回undefined,这是错误的。您应该使用回调来成功编写逻辑。即:

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

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

答案 1 :(得分:0)

此链接说明javascript提供哪些类型的工具来处理异步方法

http://blog.mediumequalsmessage.com/promise-deferred-objects-in-javascript-pt1-theory-and-semantics