【问题标题】: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;
});
}
});