循环中的角度承诺

时间:2014-03-19 12:25:32

标签: javascript loops promise

我有承诺的循环函数:

for (var a in $scope.atrakcje) {
  if ($scope.atrakcje[a].x && $scope.atrakcje[a].y) {
    App.countDistance($scope.atrakcje[a].x, $scope.atrakcje[a].y).then(function(km) {
      $scope.atrakcje[a].distance = km;
    });
  }
}

此循环的问题是所有km值都分配给最后一个$ scope.atrakcje元素。 它应该将第一个承诺分配给第一个元素,将第二个承诺分配给第二个元素,依此类推。 怎么做?

2 个答案:

答案 0 :(得分:3)

尝试:

for (var a in $scope.atrakcje) {
  if ($scope.atrakcje[a].x && $scope.atrakcje[a].y) {
    (function(index) {
      App.countDistance($scope.atrakcje[index].x, $scope.atrakcje[index].y).then(function(km) {
        $scope.atrakcje[index].distance = km;
      });
    })(a);
  }
}

答案 1 :(得分:0)

这里的问题是在then循环结束后调用了for函数,这意味着当解析了promise时,a变量将包含来自的最后一个密钥$ scope.atrakcje。在它周围创建一个闭包来捕获键的值,如:

Object.keys($scope.atrakcje).forEach(function(a) {
  if ($scope.atrakcje[a].x && $scope.atrakcje[a].y) {
    App.countDistance($scope.atrakcje[a].x, $scope.atrakcje[a].y).then(function(km) {
      $scope.atrakcje[a].distance = km;
    });
  }
});