【问题标题】:Make geolocation call synchronously in javascript在javascript中同步进行地理定位调用
【发布时间】:2014-03-05 11:52:19
【问题描述】:

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

 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  
}

}());

非常感谢!

【问题讨论】:

    标签: javascript geolocation


    【解决方案1】:

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

    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.');
    });
    

    Fiddle

    【讨论】:

    • 您如何解释“必须保持异步”?这是为什么?我觉得我理解它,但我无法解释它。
    【解决方案2】:

    我认为您不应该尝试使其同步。只需为地理位置获取器实现某种事件系统。这种方式它异步工作,但地理定位会初始化您需要地理定位的应用或组件。

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

    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
    });
    

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-06-07
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 2012-01-04
      • 1970-01-01
      • 2018-06-05
      相关资源
      最近更新 更多