Подождать, пока условие не станет истинным?

Я использую navigator.geolocation.watchPosition в JavaScript, и мне нужен способ справиться с возможностью того, что пользователь может отправить форму, полагаясь на местоположение до того, как watchPosition обнаружит свое местоположение.

В идеале пользователь должен периодически видеть сообщение «Ожидание местоположения», пока местоположение не будет определено, а затем форма будет отправлена.

Однако я не уверен, как реализовать это в JavaScript, учитывая отсутствие функции wait .

Текущий код:

var current_latlng = null;
function gpsSuccess(pos){
    //console.log('gpsSuccess');  
    if (pos.coords) { 
        lat = pos.coords.latitude;
        lng = pos.coords.longitude;
    }
    else {
        lat = pos.latitude;
        lng = pos.longitude;
    }
    current_latlng = new google.maps.LatLng(lat, lng);
}
watchId = navigator.geolocation.watchPosition(gpsSuccess,
                  gpsFail, {timeout:5000, maximumAge: 300000});
$('#route-form').submit(function(event) {
    // User submits form, we need their location...
    while(current_location==null) {
        toastMessage('Waiting for your location...');
        wait(500); // What should I use instead?
    }
    // Continue with location found...
});
21
задан Lightness Races with Monica 25 August 2011 в 15:41
поделиться

1 ответ

Попытайтесь использовать setInterval и clearInterval как это...

var current_latlng = null;

function gpsSuccess(pos) {
    //console.log('gpsSuccess');  
    if (pos.coords) {
        lat = pos.coords.latitude;
        lng = pos.coords.longitude;
    } else {
        lat = pos.latitude;
        lng = pos.longitude;
    }
    current_latlng = new google.maps.LatLng(lat, lng);
}
watchId = navigator.geolocation.watchPosition(gpsSuccess,
    gpsFail, {
        timeout: 5000,
        maximumAge: 300000
    });
$('#route-form').submit(function (event) {
    // User submits form, we need their location...
    // Checks status every half-second
    var watch = setInterval(task, 500)

    function task() {
        if (current_latlng != null) {
            clearInterval(watch)
            watch = false
            return callback()
        } else {
            toastMessage('Waiting for your location...');

        }
    }

    function callback() {
        // Continue on with location found...
    }
});
0
ответ дан 29 November 2019 в 06:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: