2016-12-27 9 views
0

У меня есть Выполнение некоторой связи $http с сервером и возвратом строки. Однако я получаю ошибку Cannot read property 'then' of undefined. Я прочитал here и here с аналогичными проблемами, однако я не смог решить свою проблему.

Это код услуги:

factory("availabilityService", ['$http', function ($http) { 

    return { 
     checkAvailability1: function (element, string) { 
      // ..... some object creation code ...... 
      $http({ 
       method: 'POST', 
       url: 'server/server.php', 
       data: AvailableObj, 
       headers: { 
        'Content-Type': 'application/x-www-form-urlencoded' 
       } 
      }) 
       .then(function successCallback(response) { 
        return response; 

       }, function errorCallback(response) { 
       }); 
     } 
    } 
}]); 

Внутри controller:

$scope.checkAvailability = function (element, string) { 
    availabilityService.checkAvailability1(element, string).then(function (response) { //on this line the error occurs 
     console.log(response); 

    }); 

ответ

2

Вы должны вернуть обещание, возвращенное $http т.е. добавить «возвращение» перед $ HTTP, чтобы получить ваш код работает, как показано ниже:

return $http(...) 
    .then(function successCallback(response) { 
     return response; 
    }, function errorCallback(response) { 
    }); 

Это потому, что t функция, которую вы вызывали из контроллера, должна иметь метод .then. Это должно быть обещание. checkAvailability1 в угловых возвращается обещание, которое необходимо вернуть обратно вашей функцией $http на заводе. Вы просто возвращаете ответ от обратного вызова успеха, который не ожидается вашим методом в контроллере.

+0

Можете ли вы объяснить логику этого? Я уже вернул сам объект и ответ HTTP-запроса. – undroid

+2

@undroid Вы возвращаете этот ответ из метода _callback_, а не из функции, которая фактически сделала запрос $ http (checkAvailability1). Этот результат никогда не выходит за рамки проверки доступности1. Операторы return неявно «пузырятся» через стек вызовов. –

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

  • Нет связанных вопросов^_^