Географическая широта и долгота с использованием JavaScript в качестве отдельных переменных

1

Я пытаюсь сохранить значения геолокации в массиве, чтобы хранить широту и долготу в виде отдельных переменных, которые могут быть доступны позже во время кода.

Идея состоит в том, чтобы хранить массив с переменными под переменной 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);
Теги:
geolocation

1 ответ

0

Он ничего не возвращает. И это асинхронно.

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);
});
  • 0
    Это все еще возвращает "неопределенное" значение.
  • 0
    @Alberto Смотрите мой обновленный ответ, это похоже на запрос ajax. Вы можете получить значение только после того, как оно было получено
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню