地理定位成功回调 - 如何处理此回调之外的返回对象?

时间:2013-10-25 13:19:20

标签: html5 geolocation

网上大多数简单的html5地理位置示例都是这样的:

if(navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(success, error);
} else {
    //no geolocation
}

function success(position) {
    //do things with the position object in here
}

function error (msg) {
    //log error codes etc here
}

我不希望在成功回调中拥有所有逻辑(有很多)。将传递给success的对象暴露给父作用域的最佳方法是什么?以某种方式使用success内的闭包?我不太明白。感谢

1 个答案:

答案 0 :(得分:3)

需要回调函数的原因是因为对getCurrentPosition的调用是异步的。因此,虽然您可以将位置公开为“父”(调用getCurrentPosition的范围)范围内的变量,但这对于调用getCurrentPosition的执行线程没有用,因为这与成功的不同功能。例如,这不起作用:

function parent(){
  var position;

  function success(p) {
    position = p;
  }

  function error (msg) {
    //log error codes etc here
  }

  navigator.geolocation.getCurrentPosition(success, error);
  var longitude = position.coords.longitude; // position is undefined here
}

但是,如果要将代码细分为较小的块,可以将位置存储在父级范围内的变量中(避免需要通过),然后将多个函数链接在一起:

function parent(){
  var position;

  function success(p) {
    position = p;
    doSomethingWithPosition();
  }

  function error (msg) {
    //log error codes etc here
  }

  navigator.geolocation.getCurrentPosition(success, error);

  function doSomethingWithPosition(){
     var longitude = position.coords.longitude; // position is defined here
     doSomethingElseWithPosition();
  }

  function doSomethingElseWithPosition(){
     var latitude = position.coords.latitude; // position is defined here
  }

}