我有承诺的循环函数:
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元素。 它应该将第一个承诺分配给第一个元素,将第二个承诺分配给第二个元素,依此类推。 怎么做?
答案 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;
});
}
});