我有一个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
无效?
谢谢!
答案 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