2014-11-03 62 views
0

我有一個關於http請求的問題。 這是我的舊帖子。如何解決我的http請求問題?

How to get the multiple http request results in my example?

我已經修改我的代碼位。基本上我需要做出多個http請求並將它們存儲到一個productGroup數組中。但是,我得到undefined作爲返回的結果。

var buildProduct = function(product) { 
     var productGroup = []; 
     for(var i = 0; i < product.length; i++) { 
      var t = buildProductDetail(product, i) 
      productGroup.push(t); 
     } 
     console.log(productGroup) // I am getting undefined here. 
     return productGroup; 
    } 

var buildProductDetail = function(product, i) { 
    var plan = {} 
    getProductDetail(product[i].id) 
     .then(function(data){ 
      plan = {detail: data.detail, name:product[i].name} 
      console.log(plan) //has data 
      return plan;  
     }) 
} 

var getProductDetail = function(id) { 
    return $http.get('/api/project/getProduct' + id); 
} 
+0

'buildProductDetail'不返回任何東西,因此'undefined'。 – elclanrs 2014-11-03 08:38:38

+0

我以爲回報計劃;將返回對象 – BonJon 2014-11-03 08:45:20

+0

[來自文檔](http://api.jquery.com/deferred.then/),'.then'在Deferred對象被解析,拒絕或仍在進行時添加要處理的處理程序。所以你需要檢查延遲對象是否已經解決。因此,您應該將推送對象的'ajax'請求或'.done'過濾器的'.success'回調中的元素推送出去。 – 2014-11-03 08:53:23

回答

1

您之前未定義,因爲您的buildProductDetail函數沒有返回任何內容。

如果您想要一個乾淨的結果,可以使用$ q api同時解析幾個promise。 https://docs.angularjs.org/api/ng/service/ $ q

我認爲它應該可以在看起來像這樣的東西上工作,但是我不能在沒有plunkr的情況下進行測試。 進樣$ Q(在angularjs本地,無需外接DEP),然後:

var buildProduct = function(product) { 
     var productGroup = []; 
     for(var i = 0; i < product.length; i++) { 
      var t = buildProductDetail(product, i) 
      productGroup.push(t); 
     } 
     return $q.all(productGroup); 
    } 

var buildProductDetail = function(product, i) { 
    var plan = {} 
    return getProductDetail(product[i].id) // don't forget the return there 
     .then(function(data){ 
      plan = {detail: data.detail, name:product[i].name} 
      console.log(plan) //has data 
      return plan;  
     }) 
} 
+0

非常感謝!這真的很有幫助! – BonJon 2014-11-03 08:52:38