Javascript 与计算值是否有任何不一致?
我有一个如下的javascript代码来计算n个标记之间的总距离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
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,是的,这与您提到的问题类似,但我没有得到任何线索,如何使用在我的案例中提供的答案。