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ステートメントで使用すると、 undefinedfalse が返されます。ロジックを正しく記述するには、コールバックを使用する必要があります。すなわち:

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

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