2016-01-14 134 views
4

我使用AngularJS和$ q作爲承諾,我對這個用法感到困惑,我該如何解決這個承諾?

我想在調用isLoggedInPromise()或「AUTH_REQUIRED」時返回用戶。

謝謝!

function isLoggedInPromise() { 
     $q.when(userWithAllData()).then(function(user) { 
      return user; 
     }); 
     $q.when(userWithAllData()).reject(function() { 
      return "AUTH_REQUIRED"; 
     }); 
    } 

    function userWithAllData(){ 
     var deferral = $q.defer(); 

     var query = new Parse.Query(Parse.User); 
     query.include(["info", "info.rank", "privateInfo"]); 
     query.get(Parse.User.current().id).then(function (loadedUser){ 
      deferral.resolve(loadedUser); 
     }); 

     return deferral.promise; 
    } 
+0

你似乎在包裝一個承諾,當你不需要 – MinusFour

回答

3

你想要做的是調用解析函數上的承諾時,函數都需要以實際返回一個承諾一個函數返回

,認爲「決心」爲數據實際的回報聲明。

所以你的isLoggedInPromise函數需要返回一個承諾,這樣會使它變得多餘。任何需要用戶的東西都必須等待。

isLoggedInPromise().then(function(result){...etc...}, function(reason){//auth needed})

如果您仍然需要isLoggedin功能,那麼它應該看起來像

function isLoggedInPromise() { 
    var isLoggedIn = userWithAllData().then(
     function(user) { 
      return user; 
     }, 
     function(reason){ 
      return $q.reject("AUTH_REQUIRED") 
     });  
} 
當然,你必須包括在userWithAllData功能有些排斥的邏輯以及的