2016-12-02 3 views
0

Ich wiederum auf StackOverFlow in meinem Streben nach Javascript und Ionic zu lernen..dann nicht warten auf Rückgabe-Funktion bei der Verwendung von CordovaGeolocation

Ich habe die folgende Werksfunktion erstellt:

.factory('GeoService', function($ionicPlatform, $cordovaGeolocation) { 

    var positionOptions = {timeout: 10000, enableHighAccuracy: true}; 

    return { 
    getPosition: function() { 
     return $ionicPlatform.ready() 
     .then(function() { 
      return $cordovaGeolocation.getCurrentPosition(positionOptions); 
     }) 
    } 
    }; 

}); 

Welche die GPS-Koordinaten erhält. Um diese Funktion zu nennen ich tue folgendes:

 GeoService.getPosition() 
      .then(function(position) { 
       //Obtain geolocation information 
       console.dir(position.coords) 

       return position.coords; 
      }, function(err) { 
       console.log('getCurrentPosition error: ' + err); 
      }).then(function(data) { 
       console.dir(data) 

       //make http request with the information 
      }) 

Das Problem, das ich habe, ist, dass die zweite .dann ist nicht für das GeoService.getPosition warten() zu lösen, bevor Sie die Informationen über http zu senden. Ich vermute, ich muss etwas in der Art von q.all verwenden, aber ich bin mir einfach nicht sicher.

Vielen Dank

+0

Es definieren sollte funktionieren. Ich vermute, dass es in getPosition ein Problem gibt, bei dem es vorzeitig abbricht. – kjonsson

Antwort

1

Sie sollten Ihre eigenen Versprechen

.factory('GeoService', function($q,$ionicPlatform, $cordovaGeolocation) { 


    function getPosition(){ 

    return $q(function(resolve, reject) { 
     var positionOptions = {timeout: 10000, enableHighAccuracy: true}; 
     $cordovaGeolocation.getCurrentPosition(positionOptions) 
     .then(function(position){ 
      resolve(position); 
     }, function(error){ 
      reject(error); 
     }); 
    }) 

    } 
    return { 
    getPosition: getPosition 
    }; 

}); 
1

Du .then() in GeoService.getPosition() verwenden, aber Sie sind kein Versprechen der Rückkehr !! Versuchen Sie folgendes:

.factory('GeoService', function($ionicPlatform, $cordovaGeolocation) { 

    var positionOptions = {timeout: 10000, enableHighAccuracy: true}; 

    return { 
    getPosition: function() { 
     return new Promise(function(resolve) { 
     $ionicPlatform.ready() 
      .then(function() { 
      $cordovaGeolocation.getCurrentPosition(positionOptions) 
       .then(function(position) { 
       resolve(position); 
       }); 
      }) 
     } 
    }; 

}); 
Verwandte Themen