3

Web 上の単純な 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何らかの形で閉鎖を使用することによって?よくわかりません。ありがとう

4

1 に答える 1

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
  }

}
于 2013-10-25T14:59:44.433 に答える