我很难理解承诺和延期。
我有一个简单的函数,如果用户是否登录,则返回true或false:
function checkAuth() {
var IsSignedIn = false;
$.ajax({
dataType:"json",
url: '/utility/SignInStatus', //only returns true if signedin. or else nothing is returned.
success: function(result) {
IsSignedIn = (result);
},
error: function() {
alert("you're not logged in");
}
});
return (IsSignedIn);
}
在另一个文件中,我想使用checkAuth()
函数来查看用户是否是签名。如果checkAuth()返回true,则可以执行操作。如果返回false,则无法执行操作。
$(document).on('click', 'a[name="deleteaccount"]', function(event) {
$.when(checkAuth()).done(function(result) {
// Here is where I want to see if checkAuth() was true or false
if (!result) {
// Show alert from the error return from checkAuth()
} else {
// Go ahead and delete the account code here
}
});)
};
我根本无法进入声明的else
部分。如果result
为true
,我怎么能实现这一目标?
答案 0 :(得分:1)
下面的方法遵循你的信函逻辑(并回答给定的问题):
function checkAuth() {
var dfd = $.Deferred();
$.ajax({
// ...
success: function(result) {
dfd.resolve(true);
},
error: function() {
dfd.resolve(false);
}
});
return dfd.promise();
}
// ...
$(document).on('click', 'a[name="deleteaccount"]', function(event) {
checkAuth().done(function(result) {
if (!result) {
// fail
return;
}
// success
});
});
...但我考虑采用不同的方法:$.ajax
来电应该会带来成功'当且仅当用户被授权时,在所有其他情况下将返回403代码(或类似的东西)。使用这种方法,可以使用Deferred
返回的对象,而无需额外的$.ajax
对象。
function checkAuth() {
return $.ajax({
// ...
error: function() {
// some common action here - modal, etc.
}
});
}
checkAuth().done(function(result) {
// authorized
}).fail(function(result) {
// not authorized - do some UC-specific action
});