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

Posted

技术标签:

【中文标题】在javascript中同步进行地理定位调用【英文标题】:Make geolocation call synchronously in 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  


());

非常感谢!

【问题讨论】:

【参考方案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
);

我希望这会有所帮助。

【讨论】:

以上是关于在javascript中同步进行地理定位调用的主要内容,如果未能解决你的问题,请参考以下文章

没有任何地图的Javascript地理定位[关闭]

在 Rails 上使用 javascript 和 ruby​​ 进行地理定位

javascript 通过坐标进行地理定位

JavaScript 使用Google地图进行HTML5地理定位

同时使用地理定位和地理编码 - Javascript

通过 React-Redux 进行地理定位