2014-11-02 19 views
0

我想做一個http請求,並將返回的結果放入我的數組中。如何在我的示例中獲取多個http請求結果?

我有類似

按Ctrl

for (var i=0; i < numOfProduct.length; i++) { 
    productFactory.makeRequest(numOfProduct[i].id) 
        .then(function(data) { 
         console.log(i) 
         //always output 10 which is my numOfProduct.length 

         numOfProduct[i].push({detail: data}); 
         //i got Cannot read property 'push' of undefined error 
        }) 
       $scope.numOfProduct = numOfProduct; 
} 

productFactory

service.makeRequest = function(id) { 
    return $http.get('/api/product/get' + id); 
} 

return service; 

我的目標是一個http請求的結果推到每個numOfProduct元素作爲對象。但是,我似乎無法使用http請求代碼來做到這一點。任何人都可以幫助我嗎?非常感謝!

+0

我不知道,但我想這是由於異步的ajax調用。然後在函數中分配$ scope.numOfProduct = numOfProduct; – 2014-11-02 23:24:19

回答

4

你有兩個問題與上面:

1是你們參考結合i,但還沒到i價值的共同回調的問題。所以,當你的回調被調用的時候,循環將會完成,並且i將在你綁定的所有回調中爲10。解決這個問題

一種方式是通過函數調用來強制i評價:

function makeCallback(productId) { 
productFactory.makeRequest(productId) 
        .then(function(data) { 
         console.log(i) 
         return ({detail: data}); 
        }); 
} 

的第二個問題是,你的陣列numOfProduct,而不是一個實際的數組中調用一個特定的值.push。 (除非該特定值是一個數組,我假設它是不是因爲你的價值呼喚.id

試試這個:

function makeCallback(productId) { 
    productFactory.makeRequest(productId) 
         .then(function(data) { 
          console.log(i) 
          return ({detail: data}); 
         }) 
} 
var array = []; 
for (var i=0; i < numOfProduct.length; i++) {  
    array.push(makeCallback(numOfProduct[i].id)); 
} 
$scope.numOfProduct = array; 

如果每個迴路被異步然後跑我建議使用流行的async libary。讓我知道你是否需要任何幫助。

相關問題