是否与计算的值有任何不一致?

时间:2014-06-30 15:23:58

标签: javascript ajax

我有一个类似下面的javascript代码来计算n个标记之间的总距离。

var distance = 0;
function updateTimeAndDistance(timeAndPath) {
    realtracPath = timeAndPath.path;
    getDistance();
   console.log("calculated distance : " + distance);
}

function getDistance() {

    for ( var i = 0; i < realtracPath.length - 1 ; i++) {
        var startPos = new google.maps.LatLng(realtracPath[i].lat, realtracPath[i].lng);
        var endPos = new google.maps.LatLng(realtracPath[i+1].lat, realtracPath[i+1].lng);
        var request = {
            origin : startPos,
            destination : endPos,
            travelMode : google.maps.TravelMode.DRIVING
        };
        directionsService.route(request, function(response, status) {
            if (status == google.maps.DirectionsStatus.OK) {
                distance += response.routes[0].legs[0].distance.value;
            }
        });


    }
}

但是我担心,当距离是异步计算时,距离值是否会有任何不一致。

编辑:每次我跑这个,我的距离都是零。虽然我使用了全局距离变量,但我不明白为什么。

感谢。

1 个答案:

答案 0 :(得分:1)

尝试引入像这样的异步回调函数;

var distance = 0;
function updateTimeAndDistance(timeAndPath) {
    realtracPath = timeAndPath.path;
    getDistance(function(){
        console.log("calculated distance : " + distance);
    });

}

function getDistance(cb) {
var latch = realtrackPath.length;
for ( var i = 0; i < realtracPath.length - 1 ; i++) {
    var startPos = new google.maps.LatLng(realtracPath[i].lat, realtracPath[i].lng);
    var endPos = new google.maps.LatLng(realtracPath[i+1].lat, realtracPath[i+1].lng);
    var request = {
        origin : startPos,
        destination : endPos,
        travelMode : google.maps.TravelMode.DRIVING
    };
    directionsService.route(request, function(response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            distance += response.routes[0].legs[0].distance.value;
            latch--
            if (latch==0){
               cb()
            }                
        }
    });


}

}

注意:如果状态没有恢复,则不会发生任何事情。具有功能签名的回调可以非常方便,该功能签名通过布尔值来指示错误等。