Я не очень часто использую javascript, поэтому не очень хорошо знаю обратные вызовы и ответы.Я использую карты Google, чтобы отобразить расстояние между точкой A и точкой X, Y, Z.Суть в том, что я хочу использовать javascript, чтобы определить, какая из точек X, Y, Z ближе всего к A, и они отображают направления между ними.
Мой код работает.Я могу определить кратчайшее расстояние из всех 3 пунктов назначения, но я застрял с этим тупым взглядом.
Видите ли, Google использует асинхронные обратные вызовы для предоставления данных в браузер и если я запускаю цикл for для проверкивсе 3 направления 1 на 1 я получаю неверные результаты.
Вот код:
var maxDistance = 99999999999;
var destn;
for (var i = 0; i < locations.length; i++) {
var thisDistance = 0;
var start = origin;
var end = locations[i];
var request = {
origin: start,
destination: end,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
thisDistance = response.routes[0].legs[0].distance.value;
if (thisDistance < maxDistance) {
destn = response.routes[0].legs[0].end_address;
maxDistance = thisDistance;
}
} else {
document.getElementById("addressNotFound").style.display = 'block';
}
});
}
calcShortestRoute(origin, destn);
Так что, очевидно, когда я вызываю эту функцию, значение destn становится неопределенным, так как цикл завершается, и обработчик Google еще не получил данные.Если я вызову функцию еще 1 раз, я получу значение destn, полученное от предыдущего обратного вызова (который дал неопределенный ранее).
Кто-то, пожалуйста, скажите мне, как я могу это исправить.