Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs Angular$htttp:我得到了哪个异步调用的回复?_Angularjs_Asynchronous - Fatal编程技术网

Angularjs Angular$htttp:我得到了哪个异步调用的回复?

Angularjs Angular$htttp:我得到了哪个异步调用的回复?,angularjs,asynchronous,Angularjs,Asynchronous,我去了一个服务器,得到了一个JSON数组,它污染了一个lat/long对数组和一些其他信息(例如车辆描述、时间戳)。对于其中的每一个,我想使用谷歌地图来反转地理编码&获取街道地址,然后将其数据放入ng网格 我的ng网格绑定到$scope.myGrid,直到现在,没有反向地理编码,我只是在JSON数据和$scope.myGrid.push之间循环('{When:data[I].time_stamp,Vehicle:data[I].description'} 这很好,现在我想添加反向地理编码,这意味

我去了一个服务器,得到了一个JSON数组,它污染了一个lat/long对数组和一些其他信息(例如车辆描述、时间戳)。对于其中的每一个,我想使用谷歌地图来反转地理编码&获取街道地址,然后将其数据放入ng网格

我的ng网格绑定到
$scope.myGrid
,直到现在,没有反向地理编码,我只是在JSON数据和
$scope.myGrid.push之间循环('{When:data[I].time_stamp,Vehicle:data[I].description'}

这很好,现在我想添加反向地理编码,这意味着使用
$http.get

因为这是异步的,所以我首先用“[地址不可用]”填充网格的“地址”列

当我得到响应时,我想从结果中设置
$scope.myGrid[???].address

但是,我如何知道索引
是什么?如果我有3个未完成的异步请求并得到响应,我如何知道它对应于哪个网格行

< >我的代码> $http.GET处于“代码”>(var i=0;i < DATA长度;I++)<代码>循环。我能不知何故将<代码> i <代码>传递到<代码> $http.GET函数吗?或者我该怎么做?< /P>
抱歉,我只是在学习。

我不认为
$http
需要知道
I
,但是它的
然后
成功回调就知道了。下面类似的内容应该会有所帮助

angular.forEach(data, function(datum, i) {
  $http.get(...).then(function(response) {
    // Here you have the response and i available
  });
});

注意:我特意使用了
angular.forEach
而不是
for
循环。由于
for
I
变量的性质,如果在
for
循环中定义了异步回调,
I
实际上总是等于它的最终值,
data.length-1
for每次回调。使用
angular.forEach
可避免此问题。

如果要使用“for”,则需要使用匿名函数来完成此操作。将i传递给匿名函数

for(var i = 0; i < $scope.myGrid.length; i++){
  (function(i){
    $http.get(...).success(function(data){
      $scope.myGrid[i].address = data
    });
  })(i);
}

谢谢。我按照你的建议使用了
forEach
$scope.myGrid.forEach(function(item, i){
  //item equels $scope.myGrid[i]
  $http.get(...).success(function(data){
    item.address = data
  });
});