如何在AngularJS中通过链接http调用来构建对象数组
How to build an object array by chaining http calls in AngularJS?
我想构建一个对象数组,但对于每个对象,我需要多个链式http调用。例如:
var objects = [];
$http.get(/getDataUrl)
.then(function(data){
for(i = 0; i < data.length; i++)
{
objects[i] = { value1 : data.value }
}
for(i = 0; i < objects.length; i++)
{
http.get(objects[i].value1)
.then(function(data){
objects[i].value2 = data.value;
}
}
})
有什么想法可以妥善处理这场混乱吗?
您将始终获得'i'值作为最终索引,因为当ajax请求给出200时,渲染器将打印它,这将需要一些时间。在短时间内,for循环将被执行,因此您将始终获得"i"值的最后一个索引
为了解决这个问题,你将不得不使用,封闭内循环
修改你的代码如下,
var objects = [];
$http.get(/getDataUrl)
.success(function(data){
for(i = 0; i < data.length; i++)
{
objects[i] = { value1 : data.value }
}
for(i = 0; i < objects.length; i++)
{
(function(index) {
var currentURL = objects[i].value1;
$http.get(currentURL)
.success(function(data) {
// both currentURL and i value can be accessed here
console.log(currentURL);
console.log(index); // i value = index
objects[index].value2 = data.value;
});
})(i);
}
})
现在您可以访问匿名函数中的索引。希望这能帮助
您可以尝试使用success而不是success,因为$http不是标准承诺:
var objects = [];
$http.get('/getDataUrl')
.success(function(data){
for(i = 0; i < data.length; i++)
{
objects[i] = { value1 : data.value }
}
for(i = 0; i < objects.length; i++)
{
http.get(objects[i].value1)
.success(function(data2){
objects[i].value2 = data2.value;
}
}
})
试试这样的方法:只有一个循环来规则它们;)
$http.get(/getDataUrl)
.then(function(data){
for(i = 0; i < data.length; i++)
{
objects[i] = { value1 : data.value }
$http.get(objects[i].value1)
.then(function(data){
objects[i].value2 = data.value;
}
}
})
相关文章:
- 当数据库中的某些内容发生变化时调用HTTP方法Meteor.js
- AngularJs.调用$http.success中的jQuery函数
- 调用 http url 有效,但 Https 不起作用
- AngularJs:在内部调用$http或$resource时,让方法同步返回
- 对于Chrome扩展程序,从https站点调用http站点时出现错误
- 调用 HTTP get 方法以使用 angular JS 在下拉列表中填充结果
- 当列表长度未知时按顺序调用 http.get
- 调用$http以响应另一个HTTP - Angular JS
- 从https调用http时拒绝访问
- 有目的地调用$http Post Request中的错误
- 如何从其他控制器调用$http.post
- AngularJs调用$http内联方法
- 如何调用HTTP请求使用Request -promise.js与许多url
- AngularJS -无法使用factory调用http服务
- 在https:// Page中调用http:// url
- 如何调用$http在angularJS顺序?但是我需要根据第一个$http的响应调用它第二个$http
- 多少次我必须调用http模块
- Django Angularjs如何使用特定的Id调用Http请求
- 在angularjs中调用http (RESTFUL WebAPI)的正确方法
- Angular.js从控制器外部调用$http.get