2014-10-29 6 views
3

Я пытаюсь создать объект-пользователь для создания нескольких HTTP-запросов. У меня есть что-то вродеКак сделать несколько HTTP-запросов в моем случае?

angular.module('App').factory('myFactory', function($http, $q) { 
    var service = {}; 

    service.setProduct = function(productObj) { 
     _productObj = productObj; 
    } 

    service.makeRequest = function() { 
     var deferred = $q.defer(); 

     $http.post('/api/product', _productObj).success(function(data){ 
      var id = data.id 
      //I am not sure how to chain multiple calls by using promise. 
      //$http.post('/api/details/, id).success(function(data) { 
      // console.log(data) 
      //} 
      deferred.resolve(data); 
     }).error(function() { 
      deferred.reject('error here'); 
     }) 
     return deferred.promise; 
    } 
    return service; 
}); 







angular.module('App').controller('productCtrl', ['$scope','$http','myFactory', 
    function($scope, $http, myFactory) { 
     myFactory.setProduct(productObj); 
     myFactory.makeRequest() 
      .then(function(data) { 
       console.log(data) 
      }, function(data) { 
       alert(data) 
      }) 

    } 
]); 

Я был в состоянии использовать myfactory.makeRequest(), чтобы сделать один звонок, но не уверен, как цепь несколько запросов HTTP. Может кто-нибудь, пожалуйста, помогите мне? Благодаря!

ответ

2

Если вам нужно сделать последовательные запросы, вам необходимо переложить обещания. Вам даже не нужно создавать свой собственный объект deferred - $http.post уже возвращает обещание, так что вы могли бы просто .then его.

return $http.get("url1") 
    .then(function(response){ 

    var nextUrl = response.data; 
    return $http.get(nextUrl); 
    }) 
    .then(function(response){ 

    var nextUrl = response.data; 
    return $http.get(nextUrl); 
    }) 
    .then(function(response){ 

    return response.data; 
    }); 

.success используется для более традиционного, не посыла подход

Вот plunker.

0

Прочитайте некоторые обещания. Помните, что JS в асинхронном режиме. Вам нужно будет сделать следующий вызов сервера в обратном вызове (первая функция .then).

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