【问题标题】:Angular promises in loop循环中的角度承诺
【发布时间】:2014-03-19 12:25:31
【问题描述】:

我有带承诺的循环功能:

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 元素。 它应该将第一个 Promise 分配给第一个元素,将第二个 Promise 分配给第二个元素,依此类推。 怎么做?

【问题讨论】:

标签: javascript loops promise


【解决方案1】:

试试:

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);
  }
}

【讨论】:

    【解决方案2】:

    这里的问题是你的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;
        });
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      • 2016-02-19
      • 2018-03-25
      • 2015-11-22
      • 2021-12-15
      相关资源
      最近更新 更多