2016-11-11 6 views
0

私は自分のウェブアプリケーションで自己を見つける必要があります。私は私の場所を固定するためにGoogleマップを使用しています。私が持っている問題は、現在の場所を返す関数である:Javaスクリプト現在の地理位置

function setLocation() { 
      var temp = { lat: 0, lng: 0 }; 
      navigator.geolocation.getCurrentPosition(function (position, temp) { 
       //here is all ok, temp.lat and tem.lng are assigned correctly 
       temp.lat = position.coords.latitude; 
       temp.lng = position.coords.longitude; 
      }); 
      //here temp.lat and temp.lng are again 0  
      return temp; 
     } 

問題を説明する私のコードにいくつかのコメントを書いています。 私は何が間違っていますか? これを読んでいただきありがとうございます。 p.s.私はJavaスクリプトで新しいです。

+0

@MikeC接続が表示されたら、自分のコードを修正するコードスニペットを教えてください。 –

+2

いいえ、あなたのコードを書くつもりはありません。スタックオーバーフローが原因ではありません。リンクされた質問を読んでそれから学ぶ。 –

+2

あなたがそれを理解する時間を費やすと、リンクされた質問があなたの質問に答えます。 – Amy

答えて

0

問題は、getCurrentPosition()がまだ実行されていないため

戻り値が正しくない非同期関数を使用しています。 getCurrentPosition()の終了後に結果を渡すコールバック関数を使用する必要があります。マイク・Cが言ったように、asyncronous機能のより詳細な説明は、約束は、私は約束を使用することをお勧めしますので

コールバックがすぐに手に負えなくなることができますより良い解決策になることができHow do I return the response from an asynchronous call?

function setLocation(callback) 
{ 
    var temp = { 
     lat: 0, 
     lng: 0 
    }; 

    navigator.geolocation.getCurrentPosition(function (position, temp) 
    { 
     temp.lat = position.coords.latitude; 
     temp.lng = position.coords.longitude; 
     if ("function" === typeof callback) 
     { 
      callback(temp); 
     } 
    }); 
    return; 
} 


setLocation(function (coords) 
{ 
    // This will alert the correct data 
    alert(coords.lat + " " + coords.lng); 
}); 

で見つけることができますオブジェクト。 Tutorial at https://davidwalsh.name/promises。主な考え方は、非同期タスクを使用しているときにコードフローを読みやすく理解できることです。あなたのコードの例があります。

+1

コードを渡すだけではありません。それは、質問者に何も教えてくれず、悪い先例を設定します。 –

+0

あなたはその質問に対するコメントを見ませんでしたか?また、明らかに解説していないコードをダンプすることは、妥当な答えではありません。質問に答えるためのヒントについては、[回答]を参照してください。 –

+1

私は通常、最初にコード修正を追加します。私はそれがなぜ機能するのか説明した後。そうすれば、その人は問題をすばやく過ぎて問題の内容を知ることができます。どのようにそれを行うかを見ているだけで何が間違っていたかを人々が理解するのに十分です。 –

関連する問題