2014-10-29 56 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函数)。

相关问题