Shaggie
Shaggie

Reputation: 1829

How to store cordova geolocation result in a variable?

Hi i have installed ngCordova and trying to accesss the lat long value using this function

$scope.lat = '';
$scope.long = '';

var posOptions = {timeout: 10000, enableHighAccuracy: false};
    $cordovaGeolocation.getCurrentPosition(posOptions)
                .then(function (position) {
                    $scope.lat = position.coords.latitude
                    $scope.long = position.coords.longitude

                }, function (err) {
                    // error
                });

console.log($scope.lat, $scope.long);

When i console it exactly below the assignment of values to lat and long variables then it provide me the result on console but when i console it outside as i have displayed in the question, it shows me empty string. What is it happening?

Upvotes: 0

Views: 877

Answers (1)

Nikola
Nikola

Reputation: 15038

edit: The reason why you see a correct console.log output when you put it inside the .then function is that this code is actually executed asynchronously. You can learn more about it from this question on StackOverflow.

I'll try to explain in my words: when you call the .getCurrentPosition function you just "leave it be", continue executing all other code, and "wait for it to finish" - and you wait for it inside the .then function. So, if you put console.log outside the .then function, it will actually execute before you get the actual coordinates - thus, it will print empty values, since they just may not yet exist.

Try it like this:

$scope.lat = '';
$scope.long = '';

var posOptions = {timeout: 10000, enableHighAccuracy: false};

$cordovaGeolocation.getCurrentPosition(posOptions)
    .then(function (position) {
        $scope.lat = position.coords.latitude;
        $scope.long = position.coords.longitude;
      
        console.log($scope.lat, $scope.long);

    },
    function (err) {
      // error
    });

Upvotes: 1

Related Questions