Я пытаюсь сохранить значения геолокации в массиве, чтобы хранить широту и долготу в виде отдельных переменных, которые могут быть доступны позже во время кода.
Идея состоит в том, чтобы хранить массив с переменными под переменной pos
. Однако я всегда получаю undefined
значение, когда я console.log его. Если я console.log перед возвратом, значения на самом деле там.
Идеи?
function onPositionUpdate(position)
{
var lat = position.coords.latitude;
var lng = position.coords.longitude;
var latlng = [lat,lng];
return latlng;
}
var pos = navigator.geolocation.getCurrentPosition(onPositionUpdate);
console.log(pos);
Он ничего не возвращает. И это асинхронно.
let pos;
function onPositionUpdate(position) {
// async action goes second (not undefined)
const lat = position.coords.latitude;
const lng = position.coords.longitude;
pos = [lat,lng];
console.log(pos);
}
navigator.geolocation.getCurrentPosition(onPositionUpdate);
// there are no value yet (undefined)
console.log(pos);
const pingPos = setInterval(() => {
if (pos) {
clearInterval(pingPos);
console.log(pos); // not undefined
}
}, 100);
Вы можете использовать его так
const getPosition = (cb) => {
const onPositionUpdate = (position) => {
const lat = position.coords.latitude;
const lng = position.coords.longitude;
pos = [lat,lng];
cb.apply(null, pos)
}
navigator.geolocation.getCurrentPosition(onPositionUpdate);
}
// use it anywhere
getPosition((position) => {
console.log(position);
});
Или используйте async/wait или promises
const getPosition = () => {
return new Promise((resolve, reject) => {
const onSuccess = (position) => {
const lat = position.coords.latitude;
const lng = position.coords.longitude;
pos = [lat,lng];
resolve(pos)
}
const onError = () => {
console.log('Can\'t get location info');
reject();
}
navigator.geolocation.getCurrentPosition(onSuccess, onError);
})
}
// use it anywhere
getPosition().then((position) => {
console.log(position);
});