2014-10-29 100 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函數)。

相關問題