在javascript中同步进行地理位置调用

在javascript中同步进行地理位置调用,javascript,geolocation,Javascript,Geolocation,我正在开发一个基于地理位置的应用程序,因此必须首先获得位置,甚至在执行应用程序的其余部分之前。那么,如何以同步方式转换此模块 var geolocation = (function() { 'use strict'; var geoposition; var options = { maximumAge: 1000, timeout: 15000, enableHighAccuracy: false }; function

我正在开发一个基于地理位置的应用程序,因此必须首先获得位置,甚至在执行应用程序的其余部分之前。那么,如何以同步方式转换此模块

 var geolocation = (function() {
 'use strict';

   var geoposition;

   var options = {
    maximumAge: 1000,
           timeout: 15000,
          enableHighAccuracy: false
};

function _onSuccess (position) {
    console.log('DEVICE POSITION');
    console.log('LAT: ' + position.coords.latitude + ' - LON: ' +  position.coords.longitude);
    geoposition = position
};

function _onError (error) {
    console.log(error)
};

function _getLocation () {
    navigator.geolocation.getCurrentPosition(
        _onSuccess,
        _onError, 
        options
    );
}

return {
    location: _getLocation  
}

}());

多谢各位

我认为你不应该尝试同步进行。只需为地理定位getter实现某种类型的事件系统。通过这种方式,它可以异步工作,但地理位置会初始化需要地理位置的应用程序或组件

下面是一个非常简单的例子,说明了这是如何工作的:

var callbacks = [];

var onGeolocationReady = function (callback) {
     callbacks.push(callback);
}

function _onSuccess (position) {
     // iterare through each callback and invoce them
}

// and making component
onGeolocationReady(function () {
    // some code here which requires geolocation
});
我希望这会有所帮助。

地理定位必须保持异步,但您可以通过向模块的主函数传递回调,并在成功函数和错误函数完成处理后分别调用它们来实现:

var geolocation = (function() {
 'use strict';

   var geoposition;
   var options = {
     maximumAge: 1000,
     timeout: 15000,
     enableHighAccuracy: false
   };

   function _onSuccess (callback, position) {
     console.log('DEVICE POSITION');
     console.log('LAT: ' + position.coords.latitude + ' - LON: ' +  position.coords.longitude);
     geoposition = position
     callback();
   };

   function _onError (callback, error) {
     console.log(error)
     callback();
   };

   function _getLocation (callback) {
     navigator.geolocation.getCurrentPosition(
       _onSuccess.bind(this, callback),
       _onError.bind(this, callback), 
       options
     );
   }

  return {
    location: _getLocation  
  }

}());

geolocation.location(function () {
  console.log('finished, loading app.');
});

您如何解释“必须保持异步”?为什么呢?我觉得我能理解,但我无法解释。