Я использую API JS-карт Google для геокодирования некоторых адресов, но мне нужно иметь доступ к ряду переменных внутри обратного вызова функции геокодирования. Геокодер является асинхронной функцией.Как передать переменные асинхронной функции обратного вызова, которая останется неизменной?
Мой код выглядит следующим образом:
for (var prop in markerData) {
geocoder.geocode({ address: addressData }, function(results, status) {
if (status == 'OK') {
lat = results[0].geometry.location.lat();
lng = results[0].geometry.location.lng();
console.log(addressData);
markerInfo = {
lat: lat,
lng: lng,
firstname: markerData[prop].firstname,
lastname: markerData[prop].lastname,
company: markerData[prop].company,
addressFormatted: addressData,
street: markerData[prop].street,
city: markerData[prop].city,
postcode: markerData[prop].postcode,
telephone: markerData[prop].telephone
}
markers[i] = new google.maps.Marker({
map: map,
position: {lat: lat, lng: lng},
title: markerData[prop].firstname + ' ' + markerData[prop].lastname,
markerInfo: markerInfo
});
markers[i].addListener('click', function() {
updateInfo(this.markerInfo);
});
$.get('cache.php', {
address: addressData,
lat: lat,
lng: lng
});
}
});
}
addressData
всегда значение последнего вхождения markerData
. markerData
данные, безусловно, правильные.
Мне нужен способ передачи как addressData
, так и markerData
функции geocoder.geocode
, которая будет доступна внутри обратного вызова.
Вы можете окружить вызов с IIFE. Таким образом, передаваемая переменная останется прежней. – Arg0n
Я не уверен, почему это было отмечено как дубликат, особенно со связанным вопросом. Это другая проблема, встречающаяся при разных обстоятельствах. Просто потому, что проблема имеет один и тот же ответ, не делает его дублирующимся вопросом. – Mike