Javascript-索引对象数组的奇怪行为
因此,我有一个难题,涉及以下代码:Javascript-索引对象数组的奇怪行为,javascript,arrays,Javascript,Arrays,因此,我有一个难题,涉及以下代码: $scope.getUserContact = function(data) { var i; for (i = 0; i < data.length; i += 1) { $http({ method: 'GET', url: [Removed] }).then(function successCallback(response) {
$scope.getUserContact = function(data) {
var i;
for (i = 0; i < data.length; i += 1) {
$http({
method: 'GET',
url: [Removed]
}).then(function successCallback(response) {
alert(JSON.stringify(data));
alert(data.length);
alert(JSON.stringify(data[i]));
...
}, function errorCallback(response) {
});
}
}
基本上,它吐出一个由一个对象组成的数组
第二行吐出来
1
正如预期的那样,数组的长度为1
第三条线吐出来
未定义
我只是不明白索引数组如何突然导致未定义
,而不是在索引处给我对象
值得注意的是,数据
是函数的一个参数
有什么帮助吗?我认为这要么是我的愚蠢错误,要么是JavaScript深处的一些奇怪和未知行为。问题在于
$http
请求是异步的,所以
- 首先,循环将初始化所有请求
- 然后,当i=data.length时,请求将结束,每个回调都将使用最后一个值i调用,而不是您想要的值
i
$scope.getUserContact=函数(数据){
var i;
对于(i=0;i }
我们需要看看数据是什么。@ScottMarcus更新了,尽管我只列出了一个字段。其余的都是字符串和数字。请参见i
alert(data.length)之后的值代码>@Mahi非常感谢你。我是1而不是0。原因是否是使用新值i运行的回调?如果是这样,什么是确保回调中使用的索引是正确索引的最有效方法?@AndrewFan我不知道为什么会发生这种情况。我需要在收到所有请求的结果后设置数据,那么如何在完成对doRequest的所有调用后运行另一个回调?实际上,这很好-我可以在每次迭代后更新数据。谢谢。要等待通话,您可以返回$http正在使用的承诺(只是一个简单的返回),要等待您可以使用的每个通话,$q.all
我刚刚编辑了添加链接和使用$http承诺的示例
[
{
"listingId":"String",
...other Strings and ints ...
}
]