在Angular中异步加载工厂坐标

Loading Coordinates in a Factory Asynchronously in Angular

本文关键字:工厂 坐标 加载 异步 Angular      更新时间:2023-09-26

对工厂的调用在地图控制器中返回得太快了。我试图设置地图的中心,但由于调用geo返回未定义,它永远不会设置中心。然而,坐标是在地理工厂中抓取的。他们只是太迟了。

我认为。then()的目的是等待返回的日期。那么,如何强制应用等待呢?

我的工厂是:

angular.module('comhubApp')
.factory('geo', function ($q) {
var getPosition = function () {
    var deferred = $q.defer();
    if (navigator.geolocation) {
      deferred.resolve(navigator.geolocation.getCurrentPosition(function (position) {
        var crd = position.coords;
        console.log('Latitude : ' + crd.latitude);
        console.log('Longitude: ' + crd.longitude);
        return crd;
      } ));
    }
    return deferred.promise;
}
// Public API here
return {
  getPosition: getPosition
};});

我的地图控制器用:

// GEOLOCATION
geo.getPosition().then( function (position) {
    console.log(position);
    $scope.center.lat = position.latitude;
    $scope.center.lon = position.longitude;
});

您正在调用deferred。定位前解决。getCurrentPosition已经返回。你需要在

之后调用它
var getPosition = function() {
  var deferred = $q.defer();
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
      var crd = position.coords;
      console.log('Latitude : ' + crd.latitude);
      console.log('Longitude: ' + crd.longitude);
      deferred.resolve(crd);
    });
  }
  return deferred.promise;
}

这是一个工作活塞:http://plnkr.co/edit/H7LEjsrSkZOzGBZIeTXF?p=preview