#javascript #c_sharp #google_maps_api
Подскажите: у меня есть 8 точек на карте я хочу найти ближайшую точку от нажатия мыши. Вот код. for (var i = 0; i < Markers.length; i++) { var request = { origin: point1, destination: Markers[i], travelMode: 'DRIVING' }; directionsService.route(request, function (result, status) { if (status == 'OK') { distance = parseInt(result.routes[0].legs[0].distance.value); console.log('in' + distance); if (distance < maxD) { maxD = distance; pointSave = Markers[i]; } } }); } calcRoute(point1, pointSave); в переменную Point1 автоматически добавляется координаты клика мыши. В Markers массив точек до которых надо построить маршрут. функция CalcRoute строит маршрут. Ошибки: 1) Почему в блоке кода ` directionsService.route(request, function (result, status) { if (status == 'OK') { distance = parseInt(result.routes[0].legs[0].distance.value); console.log('in' + distance); if (distance < maxD) { maxD = distance; pointSave = Markers[i]; } } });` Точка Marker[i] не видна? вообще не хочет сохранятся . И переменная i там почему-то всегда равна максимальному размеру массива. 2) Так же переменная distance является глобальной. Почему она не сохраняет свое значение после блока directionsService.route
Ответы
Ответ 1
Корень данных проблем кроется в асинхронности вызова замыкания, которое является параметром directionsService.route. Это замыкание будет вызвано после выхода из цикла. Соответственно i будет иметь значение Markers.length, а Markers[Markers.length] не существует. distance хоть и является глобальной, но получает значения позже чем вызывается calcRoute(), поэтому вы не видите нужного результата. См. также ответы на вопросы: Использование promise с циклом for Как вернуть значение из события или из функции обратного вызова? Или хотя бы дождаться их окончания
Комментариев нет:
Отправить комментарий