Во втором $.each
я не уверен, что value
означает, что код ссылается. Попробуйте этот подход вместо:
Сделайте это, чтобы установить значение:
data[index].driveTime = response.trips[0].routes[0].duration.value;
Используйте это для своей нижней петли:
var closest_store;
$.each(data, function(index, current_store) {
if (index == 0) {
closest_store = current_store;
} else if (current_store.driveTime.value < closest_store.driveTime.value) {
closest_store = current_store;
};
console.log(current_store.driveTime);
});
Обновление для исправления асинхронной проблемы:
$.getJSON('<?php echo Url::base() ?>oldservices/get_locations', {}, function(data){
var count = 0;
$.each(data, function(index, value) {
var end = data[index].address;
var request = {
origin: start,
destination: end,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
count++;
directionsService.route(request, function(response, status) {
count--;
if (status == google.maps.DirectionsStatus.OK)
value.driveTime = response.trips[0].routes[0].duration.value;
if (count == 0)
getClosestStore(data);
});
});
});
function getClosestStore(data) {
var closest_store = data[0];
$.each(data, function(index, current_store) {
if (current_store.driveTime.value < closest_store.driveTime.value)
closest_store = current_store;
});
//do something with closest_store
}
Это подсчитывается перед отправкой запроса, и когда каждый запрос возвращается, отсчитывается ... когда мы возвращаемся к 0 (последний запрос возвращается), он затем запускает функцию, которая вычисляет ближайшее хранилище.