javascript – 无法应对navigator.geolocation的异步特性

我在firefox 3.6中使用了navigator.geolocation.getCurrentPosition(function)api.当我试图反复调用这个方法时,我发现它有时会起作用,有时则不然.我认为问题是由于它的异步回调性质.我可以看到回调函数在某个时刻被调用,但我的外部函数已经退出,所以我无法捕获位置坐标的值.

我是javascript的新手,所以我假设其他javascript编码器可能已经找到了如何处理它.请帮忙.

编辑:这是我正在使用的一段代码示例

<script type="text/javascript">
   function getCurrentLocation() {
     var currLocation;
      if(navigator.geolocation) {
         navigator.geolocation.getCurrentPosition(function(position) {
          currLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
        });
       }
       return currLocation; // this returns undefined sometimes. I need help here
}    
</script>

编辑2:
谢谢大家的回答,我希望我能选择所有答案为“已接受”,但不能这样做.

现在我面临另一个问题.我每3秒调用一次navigator.geolocation.getCurrentPosition,但响应在10到15个回复后停止.任何人都有任何想法?

再次感谢

最佳答案
是的,您对操作的回调性质有疑问.您无法调用getCurrentLocation()函数并期望它将同步返回.我甚至感到惊讶,它偶尔会起作用.

在使用异步调用时,您必须使用稍微不同的范例.您应该调用您的函数plotCurrentLocation()并执行类似以下示例的操作:

function plotCurrentLocation(map) {
   if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(function(position) {
         var currLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);

         // plot the currLocation on Google Maps, or handle accordingly:

         new google.maps.Marker({ title: 'Current Location',
                                  map: map, 
                                  position: currLocation });

         map.setCenter(currLocation);
      });
   }
}

注意传递给plotCurrentLocation()函数的map参数如何可用于内部函数.这是有效的,因为JavaScript有closures.

更新:

其他答案建议的回调方法是通过添加另一层抽象来解决这个问题的另一种方法.

转载注明原文:javascript – 无法应对navigator.geolocation的异步特性 - 代码日志