在我的示例中,如何获得多个http请求结果

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

本文关键字:http 请求 结果 何获得 我的      更新时间:2023-09-26

我正在尝试发出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请求代码做到这一点。有人能帮我吗?非常感谢!

您有两个问题:

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;

如果每个循环都是异步运行的,那么我建议使用流行的异步库。如果你需要任何帮助来设置这个,请告诉我。