титан-мобайл и не может получить значение достоверности вне функции - PullRequest
0 голосов
/ 10 декабря 2011

Я не уверен, что я действительно глуп или что-то пропустил, но в основном я пытаюсь получить доступ к переменной latitude и поместить ее в переменную params, чтобы я мог отправить ее в запросе post, однако это не так Кажется, работает, если я предупреждаю переменную широту непосредственно перед параметрами вне функции, я присваиваю ей значение, предупреждение возвращается пустым. Мой код выглядит следующим образом:

var latitude;



    Titanium.Facebook.requestWithGraphPath('me', {}, 'GET', function(e) {
                if (e.success) {
                    var user = eval('('+e.result+')');

                    var currentTime = new Date();
                    var hours = currentTime.getHours();
                    var minutes = currentTime.getMinutes();
                    var month = currentTime.getMonth() + 1;
                    var day = currentTime.getDate();
                    var year = currentTime.getFullYear();                                               

                    if (Ti.Geolocation.locationServicesEnabled) { 
                        Titanium.Geolocation.purpose = 'Get Current Location'; 
                        Titanium.Geolocation.getCurrentPosition(function(e) { 
                            if (e.error) { 
                                alert('Error: ' + e.error); 
                            } else { 
                                latitude = e.coords.latitude;
                                longitude = e.coords.longitude;
                                accuracy = e.coords.accuracy;
                            } 
                        }); 
                    } else { 
                        alert('Please enable location services'); 
                    }

                    alert(latitude);

                    var params = {
                        username: user.username,
                        gender: user.gender,    
                        lastOnline:day+"/"+month+"/"+year+" -  "+hours+":"+minutes,
                        latitude:latitude,
                        //longitude:longitude,
                        //accuracy:e.coords.accuracy,
                    };

1 Ответ

1 голос
/ 10 декабря 2011

Уверен, что это стандартная проблема "ожидание асинхронной функции, которая будет вести себя синхронно".Хотя я не знаком с Titanium-Mobile, я предполагаю, что Titanium.Geolocation.getCurrentPosition является асинхронной функцией - это означает, что указанная вами функция обратного вызова не запустится к тому времени, когда выполнится следующий оператор alert(latitude);.1003 *

Чтобы это исправить, вам нужно убедиться, что все, для чего требуется установить геолокацию, вызывается в функции обратного вызова, а не раньше:

Titanium.Geolocation.getCurrentPosition(function(e) { 
    if (e.error) { 
        alert('Error: ' + e.error); 
    } else { 

        var params = {
            username: user.username,
            gender: user.gender,    
            lastOnline: day+"/"+month+"/"+year+" -  "+hours+":"+minutes,
            latitude: e.coords.latitude,
            longitude: e.coords.longitude,
            accuracy: e.coords.accuracy
        };

        // now do something with params
        initializeStuff(params);
    } 
}); 
...