2016-01-14 2 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, а также.

Смежные вопросы