2016-03-27 13 views
0

Я пытаюсь получить некоторые важные вещи, такие как: companyid,employeeid и т. Д. С каждым запросом, который пользователь делает. Так что это должно быть получено до все остальное сделано.Угловое обещание не работает

После этого пользователь получает информацию, основанную на его компании, которую он устанавливает с каждым запросом (get/company/{companyid}).

Проблема, которая у меня есть, заключается в том, что ответ на получение companyid принимает длинные и угловые уже пытается сделать запрос (get/company/{companyid}), очевидно, что нет companyid.

Я попытался исправить это обещание, но оно не работает.

Здесь я пытаюсь получить какую-то важную информацию о пользователе (что я делаю с каждым запросом):

Service

(function() { 
    angular.module('employeeApp') 
     .service('authenticationservice', authenticationservice); 

    function authenticationservice($http,$location,authenticationFactory,$q,GLOBALS,$cookies) { 

     this.validateUser = function() { 
      var vm = this; 
      vm.deferred = $q.defer(); 

      data = {"api_token": api_token}; 

      return $http.post(GLOBALS.url+'show/employee/' + $cookies.get('employeeid'),data) 
       .success(function(response) 
       { 
        vm.deferred.resolve(response); 
       }) 
       .error(function(err,response) 
       { 
        vm.deferred.reject(err); 
       }); 

      return vm.deferred.promise; 
     } 
    } 
})(); 

Маршруты файл (В моих маршрутах файла я использую authenticationservice, чтобы установить все важные переменные пользователей.)

employeeAppModule.run([ 
     'authenticationservice', 
     'constants', 
     function(authenticationservice,constants) { 
      authenticationservice.validateUser() 
       .then(function(response) 
       { 
        constants.companyid = response.result.Employee; 
        constants.role = response.result.Role; 
        constants.name = response.result.FirstName; 
        console.log('test'); 
       }, 
       function(response){ 
        console.log('error'); 
       }); 

     } 
    ]); 

Таким образом, проблема в том, что пользовательская информация установлена ​​на поздний, а угловой уже идет на мой homeController, где он использует companyId, который еще не установлен.

Thankyou

+0

'$ http' уже возвращает обещание, которое вы могли бы просто вернуться. Почему вы пытаетесь обернуть его в '$ q'? – migg

+0

'.success' устарел. См. Docs https://docs.angularjs.org/api/ng/service/$http#deprecation-notice – user2950720

+0

Вам необходимо решить обещание перед его возвратом: vm.deferred.resolve(); –

ответ

1

Проблема в вашем текущем коде: return $http.post имеют два оператора возврата в вашем методе validateUser. Который возвращает $http.get, прежде чем возвращать return vm.deferred.promise; &, что почему созданное по отдельности обещание не возвращается из вашего метода. Хотя, удалив сначала return от $http.get, вы исправите свою проблему, я бы не предложил пойти на такое исправление, потому что это считается плохим шаблоном для реализации.

Скорее я бы сказал, вы должны использовать обещание возврата $http метод, & использовать .then, чтобы вернуть данные в механизм цепочки обещаний.

Код

function authenticationservice($http, $location, authenticationFactory, $q, GLOBALS, $cookies) { 
    this.validateUser = function() { 
    var vm = this; 

    data = { 
     "api_token": api_token 
    }; 

    return $http.post(GLOBALS.url + 'show/employee/' + $cookies.get('employeeid'), data) 
     .then(function(response) { 
     var data = response.data; 
     retrun data; 
    }, function(err) { 
     return $q.reject(err); 
    }); 
    } 
} 
0

Чтобы убедиться в том, что $ HTTP возвращает объект $ обещания вам нужно проверить, что действие в контроллере возвращает значение, и это не является недействительным действие.