MiragePresent
@MiragePresent
программист php

Как правильно возвратить значение функции?

Надо сделать функцию которая будет возвращать местоположение пользователя. Делал так:
function location() {
    
    var geo = false;

    navigator.geolocation.getCurrentPosition(
        function(position){
            
            geo = {lat: position.coords.latitude, lng: position.coords.longitude};

        }
    );

    return geo;

}

Но понятно что она работает неправильно. Как сделать функцию синхронной?
  • Вопрос задан
  • 135 просмотров
Решения вопроса 1
@zenwarr
Делать ее асинхронной, очевидно же. Добавить к location еще один аргумент callback, и вызывать его, когда доступны координаты. Это абсолютно нормальная практика, и это логично. Ведь, например, браузер при запросе координат выведет запрос (немодальный), в котором будет спрашивать пользователя, позволяет ли он получить координаты. Если сделать location синхронной, то ваша страница просто "зависнет" до тех пор, пока юзер не нажмет на кнопку. Оно вам надо?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Сделать функцию синхронной - никак. Вам нужно весь остальной код, который с ней работает сделать асинхронным. Лучше всего использовать для этого Promise.
Ответ написан
Комментировать
@scalder27
Согласен с Алексей Уколов, что можно сделать только асинхронно. Немного кода:
function location() {    
    return new Promise(function(resolve, reject) {
        navigator.geolocation.getCurrentPosition(resolve, reject);
    });
}

location()
    .then(function(position) {
        console.log({
            lat: position.coords.latitude,
            lng: position.coords.longitude
        });
    })
    .catch(function(error) {
        console.log(error);
    });
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы