Поскольку geocode()
является асинхронным, как вы также упоминаете, невозможно вызвать его синхронно. Итак, var latlng = codeAddress(address);
это невозможно . Вам нужно использовать результат геокодирования внутри самой функции. Рассмотрим:
var latlng = null;
function codeAddress(address) {
geocoder.geocode( {'address':address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
latlng = results[0].geometry.location; // use latlng here ..., e.g.:
alert("Lat/lng is: " + latlng);
} else {
alert("Geocode failed due to: " + status);
}
});
}
Вызов codeAddress(address)
присваивает глобальной переменной latlng
. Однако проблема в том, что вы не знаете, когда происходит назначение. В приведенном выше случае вы узнаете только после появления окна предупреждения.
Общий подход заключается в обработке результата геокодирования внутри обратного вызова, например, использовать результат для заполнения поля HTML.