离子角工厂返回undefined

时间:2015-10-14 10:34:07

标签: javascript angularjs cordova ionic-framework

我有一个视图,我在那里渲染一张谷歌地图,然后定期检查设备的位置。

控制器

.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返回时带有未定义的值,因为它是在lat上传递实数值之前调用的。

请帮忙。

1 个答案:

答案 0 :(得分:0)

您应该只返回跟踪方法或返回承诺,并且成功回调使用lat和long值解决此承诺。