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

Javascript 与计算值是否有任何不一致?,javascript,ajax,Javascript,Ajax,我有一个如下的javascript代码来计算n个标记之间的总距离 var distance = 0; function updateTimeAndDistance(timeAndPath) { realtracPath = timeAndPath.path; getDistance(); console.log("calculated distance : " + distance); } function getDistance() { for ( var i

我有一个如下的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;
            }
        });


    }
}
var距离=0;
函数updateTimeAndInstance(时间和路径){
realtracPath=timeAndPath.path;
getDistance();
console.log(“计算距离:+距离”);
}
函数getDistance(){
对于(var i=0;i
但我担心的是,当异步计算距离时,计算的距离值是否会有任何不一致性

编辑:每次我运行这个,我得到的距离为零。我不明白为什么,尽管我使用了全局距离变量


谢谢

试着像这样引入一个异步回调函数

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


}
var距离=0;
函数updateTimeAndInstance(时间和路径){
realtracPath=timeAndPath.path;
getDistance(函数(){
console.log(“计算距离:+距离”);
});
}
函数getDistance(cb){
var latch=realtrackPath.length;
对于(var i=0;i
}


注意:如果状态没有返回为OK,则不会发生任何事情。使用带有函数签名的回调可以非常方便地传递布尔值,指示错误等。

您的变量realtrackPath在全局范围内不存在。也就是说,我猜你的循环从未被输入。尝试添加
var realtracPath到代码的顶部。注意:传递这些变量可能比将它们留在函数范围之外要好。看起来像是@joe的副本,所有变量都是根据范围定义的。抱歉没有上传整个代码。@Joe这可能是时间问题,而不是范围问题(即,
console.log
directionsService.route
回调函数之前按时间顺序运行)。@apsillers,是的,这与您提到的问题类似,但我没有得到任何线索,如何使用在我的案例中提供的答案。