gpt4 book ai didi

javascript - 计算出来的值会不会有不一致的情况?

转载 作者:行者123 更新时间:2023-12-03 12:19:53 26 4
gpt4 key购买 nike

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


}

}

注意:如果状态未恢复为“正常”,则不会发生任何情况。使用函数签名来传递指示错误等的 bool 值的回调会非常方便。

关于javascript - 计算出来的值会不会有不一致的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24493604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com