Mam taki kod:
var getPositionByGeolocation = function() {
var geolocation = {};
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
//console.log(position.coords.latitude);
//console.log(position.coords.longitude);
geolocation = {
lat: position.coords.latitude,
lon: position.coords.longitude
};
//console.log(JSON.stringify(geolocation));
});
return geolocation;
} else {
return false;
}
}
var getPositionByIP = function() {
var IPPosition = {};
$.ajax({
url: 'https://freegeoip.net/json/',
success: function(response) {
IPPosition.lat = response.latitude;
IPPosition.lon = response.longitude;
//console.log(IPPosition.lat);
}
});
//console.log("I'm here");
return IPPosition;
}
$(document).ready(function() {
var userPosition = false;
var userPosition = getPositionByGeolocation();
if (userPosition == false) {
userPosition = getPositionByIP();
}
$('h2').text(JSON.stringify(userPosition));
});
który (w pierwszej kolejności) ma określić lokalizacje użytkownika na podstawie lokalizacji urządzenia (poprzez navigator.geolocation) albo na podstawie lokalizacji IP. Generalnie kod nie działa i z tego co już rozgryzłem to winne jest asynchroniczne wywołanie kodu, które powoduje, że np. funkcja getPositionByGeolocation zwraca wartość zanim zostaną do niej przypisane właściwe parametry w navigator.geolocation.getCurrentPosition . W jaki sposób "zmusić" js żeby zaczekał do końca działania wywołania asynchronicznego ? Normalnie przy prosty przypadkach cała obsługę "po" robiło się w callbacku ale tutaj chciałem to podzielić na jakieś części logiczne, żeby nie zagnieżdżać jednego wywołania w drugie.