2014-11-02 22 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。让我知道你是否需要任何帮助。

相关问题