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
部分。我建议使用延迟以使代码更易于管理,但这只是技术问题