У меня возникла следующая проблема. Я хочу использовать службу геокодирования Google, чтобы нарисовать некоторые маркеры на карте. Тем не менее, маркер создается до того, как геокодирование даже закончило работу. drawMarker
функция вернет Marker
с location
undefined.Асинхронное выполнение функции, переданной как аргумент
Я попытался передать функцию геокодирования в качестве аргумента функции drawMarker
и выполнить ее там. Я думал, что таким образом я бы достиг синхронного поведения, чего не было. Упрощенный код следующим образом:
drawMarker(i, map, codeAddress, locationsToConvert[i]);
function drawMarker(i, map, func, arg) {
var location = func.apply(this, [arg]);
return new google.maps.Marker({
position: {lat: location.lat, lng: location.lng},
map: map,
html: locations[i][0],
id: i
});
}
function codeAddress(address) {
geocoder.geocode({ 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
return results[0].geometry.location
}
});
}
Каковы мои решения, которые один лучших, возможно:
- используя интерфейс Promise?
- Выполнение всего в одной функции и создание экземпляра
Marker
в обратном вызове службы геокодирования? - прочее?