2015-06-10 3 views
0

Привет я установил ngCordova и пытаюсь Accesss Латы длинного значения с помощью этой функцииКак сохранить результат геополяции corova в переменной?

$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); 

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

+0

У вас не хватает запятой при назначении значений. – QueryLars

+0

Это не проблема. даже если я добавлю, то он пока не отображается. – Shaggie

+0

заведите свой getCurrentPosition с тайм-аутом или используйте watchPosition. Когда вы пишете console.log, переменные могут еще не инициализироваться данными gps, так как вам нужно некоторое время, чтобы получить эти данные – AshBringer

ответ

1

редактировать: Причина, почему вы видите правильный console.log вывод, когда вы поместите его внутри функции .then, что этот код на самом деле выполняется асинхронно. Вы можете узнать больше об этом от this question on StackOverflow.

Я попытаюсь объяснить в своих словах: когда вы вызываете функцию .getCurrentPosition, вы просто «оставьте это», продолжайте выполнение всего остального кода и «дождитесь его завершения» - и вы ждете его внутри .then функция. Итак, если вы положили console.log за пределы функции .then, она фактически выполнится, прежде чем вы получите фактические координаты - таким образом, она будет печатать пустые значения, так как они еще могут не существовать.

Попробуйте так:

$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 
 
    });

+0

Я думаю, вы должны объяснить, почему это работает, и его кода нет. Он уже пробовал это, прочитал свою последнюю строку – jcesarmobile

+0

@jcesarmobile: ах, ты прав. Вскоре я уточню свой ответ. – Nikola

+0

okk получил его, я должен продолжить обработку внутри части. Then. спасибо – Shaggie

Смежные вопросы