2015-10-14 88 views
0

我得到了一個視圖,我呈現一個谷歌地圖,然後應該定期檢查設備的位置。離子角工廠返回undefined

控制器

.controller('SearchCtrl', function($scope, $ionicLoading, TrackLocation) { 
    //document.addEventListener("deviceready", onDeviceReady, false); 
    //function onDeviceReady() { 

     //Loads Google Map 
     var mapOptions = { 
      center: new google.maps.LatLng(0,0), 
      zoom: 16, 
      mapTypeId: google.maps.MapTypeId.ROADMAP, 
      mapTypeControl: false, 
      streetViewControl: false 
     }; 
     var map = new google.maps.Map(document.getElementById("map"), mapOptions); 

     var myPost = TrackLocation.track(); 
     console.log(myPost); 
    //} 
}) 

.factory('TrackLocation', function($http, $cordovaGeolocation) { 
    return { 
     track: function() { 

      console.log("Started Tracking"); 
      var lat, long; 

      var watchOptions = { 
       timeout : 3000, 
       enableHighAccuracy: true 
      }; 

      var watch = $cordovaGeolocation.watchPosition(watchOptions); 
      watch.then(
      null, 
      function(err) { 
       console.log(err); 
       return "lole"; 
      }, 
      function(position) { 
       lat = position.coords.latitude 
       long = position.coords.longitude 
       console.log(lat); 
      }); 
      return {'lat': lat, 'long':long }; 
     }, 
     stop: function() { 

     } 
    }; 

}) 

控制檯登錄

Started Tracking 
Object {lat: undefined, long: undefined} 
103 14.408132700000001 

的myPost是返回一個未定義的值,因爲它被稱爲前的實際價值是通過對土地增值稅。

請幫忙。

+0

你在'watch.then'完成之前返回結果並且你設置了你的變量 – Grundy

+0

我試着把'return {'lat':lat''long':long};'放在'function(position)我是一個普通的未定義..不是一個對象,但明確未定義。 – Roi

+0

當然,因爲在這種情況下,您確實從'watch'回調函數返回,而不是'track'函數 – Grundy

回答

0

你應該只是在你的跟蹤方法中返回或者返回promise,而不是在成功回調中用lat和long值解決這個承諾。