2016-09-30 12 views
0

Factory:Как использовать обещания между угловыми фабриками и контроллерами? - Имея раздражающий вопрос - Спасибо

function thingyFactoryFunction($http) { 
    return { 
     search: function(city, state) { 
     $http({ 
      method: 'POST', 
      url: 'http://localhost:7500/search', 
      data: {city: city, state: state} 
     }).then(function successCallback(res) { 
      return res 
     }) 
     } 
    } 
    } 

Вот мой контроллер. Я хочу, чтобы контроллер просто получил ответ от фабрики выше, и поэтому я могу установить vm.thing равным ответу обещания. Тем не менее, я продолжаю получать ошибку, что, если я еще раз увижу, что я собираюсь перейти на berzerk: 'TypeError: Can not read property' then 'of undefined'.

function thingyIndexControllerFunction(thingyFactory) { 
    var vm = this; 
    vm.city; 
    vm.state; 
    vm.search = function() { 
     thingyFactory.search(vm.city, vm.state).then(function(res) { 
     console.log(res); 
     }) 
    } 
    } 
+2

просто добавьте '' возвращение до запуска '$ http' – smnbbrv

+1

В первую очередь, от контроллера, если вы не вызывать функцию фабрики поиска как thingyFactory.search, а не thingy.search? –

ответ

0

Ваш завод/метод поиска не возвращает ничего. Ваша попытка доступа .then() ничего (неопределенного). $ http сам возвращает объект обещания. Попробуйте следующее.

app.factory('thingyFactory', function($http) { 
 
    return { 
 
    search: function(city, state) { 
 
     //This will return promise object. 
 
     return $http({ 
 
     method: 'POST', 
 
     url: 'http://localhost:7500/search', 
 
     data: { 
 
      city: city, 
 
      state: state 
 
     } 
 
     }); 
 
    } 
 
    } 
 
});

в контроллере,

app.controller('thingyIndexController', function($scope, thingyFactory) { 
 
    var vm = this; 
 
    vm.search = function() { 
 
    var promise = thingyFactory.search(vm.city, vm.state); 
 
    //after promise resolved then() method get called 
 
    promise.then(function(res) { 
 
     console.log(res); 
 
    }) 
 
    } 
 
});

+0

Вы говорите: «Ваша фабрика/служба ничего не возвращает». Почему это ничего не возвращает? Не возвращает ли весь метод поиска, указанный после слова «return» в блоке {}? –

+0

Извините, я хочу сказать thingyFactory.search mehod. Виноват. – ram1993