@Marooned:
Oj, a czy geocoder.geocode
nie działa asynchronicznie? Nie korzystałem nigdy z tej funkcji, ale na to wygląda. Dlatego właśnie oczekuje callbacka. W takim wypadku to, co napisałeś, nie zadziała -- funkcja getAddressName
zwróci undefined
bo dopiero po tym jak skończy działanie (!) zostanie odpalony callback i zostanie ustawiona zmienna result
, której wartość już dawno została zwrócona.
Jeśli funkcja geocode
działa asynchronicznie, to nie da się zaimplementować funkcji getAddressName
w sposób synchroniczny, tj. tak żeby zwracała uzyskaną asynchronicznie wartość.
Można jedynie napisać tę funkcję asynchronicznie, czyli jakoś tak:
Kopiuj
function getAddressName(cords, callback) {
// tu może być kod wykonywany przed geocode()
geocoder.geocode({'latLng': cords}, function(results, status) {
var addressName = results[0].formatted_address;
// tu może być kod wywoływany po geocode()
if (typeof callback === "function") {
callback(addressName);
}
});
}
I wtedy używa się tego tak:
Kopiuj
getAddressName(cośtam, function(addressName) {
alert(addressName);
});