Valonix
@Valonix
Back end / Front end developer

Использование сервиса в контроллере then()?

Привет. Не могу никак разобраться.
Есть контроллер auth и есть сервис
Шлю форму на сервер и получаю успешные данные и т.д. Но ругается TypeError: Cannot read property 'then' of undefined.

Код контроллера
$scope.login = function(){
                    authService.login($rootScope.user).then(
                        function(response){
                            if(response.data.state === 'success'){
                                $cookies.putObject('user', response.data.user, {expires: expireDate});
                                $rootScope.authenticated = true;
                                $rootScope.current_user = response.data.user.username;
                                $location.path('/');
                            }
                            else{
                                $rootScope.error_message = response.data.message;
                            }
                        },
                        function(response){
                            $rootScope.error_message = "Some error with register" + response.data.status;
                        }
                    );
                };


И сервис
authService.login = function(data){
              $http.post('/auth/login', data).then(function(response){
                    return response;
                }, function(response){
                    
                });
            };

Я думал что сначала исполнится then в сервисе и лишь потом отдаст контроллеру респонс. Но на деле выходит иначе.
Подскажите что я не так делаю.
P.s. Гуглил и натыкался про промисы и т.д. Не совсем вьезжаю как их использовать.
  • Вопрос задан
  • 228 просмотров
Пригласить эксперта
Ответы на вопрос 2
dedalik
@dedalik
Веб разработчик
Нужно сделать return:

return $http.post('/auth/login', data).then(function(response){ ...
Ответ написан
Комментировать
Valonix
@Valonix Автор вопроса
Back end / Front end developer
Вот так заработало
authService.login = function(data){
                var deferred = $q.defer();
                $http.post('/auth/login', data).then(function(response){
                    setTimeout(function() {
                        if(response.data){
                            deferred.resolve(response);
                        }else {
                            deferred.reject('err');
                        }
                    },1000);
                });
                return deferred.promise;
            };


Это в сервисе.

p.s. Так всегда, сидишь 2 часа голову ломаешь, постишь на тостере. А потом бац и работает :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы