2017-07-01 110 views
0

我有一個名爲$ scope.propname的名單,其中有一個名爲latlong的對象,所以我需要找到所有屬性從特定位置的距離,所以這裏是我在做什麼

for (var i = 0; i < $scope.propname.length; i++) { 
    if ($scope.propname[i].latlong == "") { 
    var pptlatlong = ("" + "," + ""); 
    } else { 
    var pptlatlong = $scope.propname[i].latlong.replace(/\s*,\s*/g, ","); 
    } 
    var latlongdata = { 
    scoord: $scope.loclatlong, 
    ecoord: pptlatlong 
    } 
    $http({ 
    method: 'post', 
    data: latlongdata, 
    url: $rootScope.ServiceBaseUri + 'Map/geolocation' 
    }).then(function successCallback(resp) { 
    $scope.latlongdist = resp.data; 
    }, function errorCallback(resp) {}); 
    $scope.propname[i].dist = $scope.latlongdist; 
} 

因此,所有在列表中的命名DIST對象是相同的值後的整個循環ends.It應該是HTTP響應循環繼續之前,我想所有的屬性不同的是,有辦法等到的HTTP每個循環結束,然後繼續?

+0

不要使用'$ scope'屬性作爲計算公式的臨時變量。 – Claies

+0

@Claies你的意思是我保存http action的響應的範圍? – Melvin

+0

不要使用'$ scope.latlongdist';如果使用'$ scope',則只應附加到您實際打算在HTML中顯示的'$ scope'屬性。您的計算失敗,因爲即使有多組座標,每組都共享一個輸出變量。 – Claies

回答

0

一個更好的辦法,

var loclatlong = $scope.loclatlong, 
    geolocUrl = $rootScope.ServiceBaseUri + 'Map/geolocation'; 

$scope.propname.forEach(function(prop, index) { 

    if(prop.latlong === "") { 
     var pptlatlong = (""+","+ ""); 
    } else { 
     var pptlatlong = prop.latlong.replace(/\s*,\s*/g, ","); 
    } 

    var latlongdata = { 
     scoord: loclatlong, 
     ecoord: pptlatlong 
    }; 

    $http({ 
     method: 'post', 
     data: latlongdata, 
     url: geolocUrl 
    }) 
    .then(
     function(res) { 
      $scope.propname[index].dist = res.data; 
     }, 
     function(err) { 
      console.log(err); 
     } 
    ); 
}); 
0

您的for循環中一切都得到異步調用返回之前執行。

只需分配你的價值觀的.then內,如:

$scope.propname[i].dist = response.data; 

重要:的更好的方法是存儲陣列中的所有承諾和只使用propname值時,所有的人都得到了解決。這樣你就可以確保你不會遺漏任何未解決的值。

+0

我試着在$ http成功內部賦值,但是我得到了一個錯誤「dist of undefined」 – Melvin

+0

您需要檢查爲什麼'$ scope.propname [i]'是未定義的。 @Melvin – tiagodws

+0

,因爲它在$ http響應之前循環,不等待它 – Melvin