如何使用输出true或false的延迟结果

时间:2014-11-29 22:27:32

标签: jquery

我很难理解承诺和延期。

我有一个简单的函数,如果用户是否登录,则返回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部分。如果resulttrue,我怎么能实现这一目标?

1 个答案:

答案 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
});