在我的示例中,如何获得多个http请求结果
How to get the multiple http request results in my example?
我正在尝试发出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;
如果每个循环都是异步运行的,那么我建议使用流行的异步库。如果你需要任何帮助来设置这个,请告诉我。
相关文章:
- Meteor如何接收HTTP请求
- 在我的情况下,如何进行http请求
- 使用插件收听Firefox标签的http请求
- http请求使用html而不是json进行响应
- 在node-js路由中发出http请求
- 是否可以在没有HTTP请求或<输入>
- Acync JS HTTP请求通知请求
- PhantomJs在控制台中发出http请求时不会返回任何状态
- PHP处理来自一个页面的http请求,并将其显示在另一个页面上
- Firefox插件-如何发出http请求
- 验收测试主要针对传出的http请求
- 验证HTTP请求来自NFC标签上的点击
- 如何制作'http请求'在Node js中同步
- 为什么我在Cloud9中的http请求总是返回错误
- AngularJS Typeahead和$http请求限制
- HTTP请求使用cURL,但在浏览器中使用javascript时会得到CORS响应
- 如何使用Chrome扩展API获取网页的所有HTTP请求
- 将http请求中的数据传递给C#控制器
- 在初始化路由之前发送$http请求
- 从客户端捕获 HTTP 请求(包括 ajax)