2016-07-09 2 views
0

を逆に私はこのコードを持っている:コメントアウトされGoogleはジオコード戻り変数

var reverseGeo = function (latitude, longitude){ 

var address1; 

var geocoder = new google.maps.Geocoder(); 

var location = new google.maps.LatLng(latitude, longitude); 

geocoder.geocode({'latLng': location}, function(results, status){ 
    if(status === google.maps.GeocoderStatus.OK){ 
     if(results[0]){ 
      address1 = results[0].formatted_address; 
      //console.log(address1); 

     } 
     else{ 
      console.log(status); 
     } 

    } 

}); 

console.log(address1); 
}; 

最初console.log();は正しいです。フォーマットされたアドレスが含まれます。下の2番目のconsole.log()undefinedです。私はここで何が欠けていますか?さらに、私はこのaddress1変数を、このスクリプトを直接呼び出す親のjavascriptファイルに返す必要があります。どんなに私もしてみてください何を、私はあなたがそれが第二だとして、JavaScriptとコールバック関数の非同期機能

geocoder.geocode関数はコールバック関数を受け入れ、理解と問題を抱えているgeocoder.geocode();

答えて

1

でローカル以外のどこにでもundefinedを取得していませんパラメータ。この関数は、アドレスが取得されるたびに非同期に呼び出されます。

最後にconsole.logが機能しないのは、geocoder.geocode()関数が呼び出された後、プログラムはコールバック関数が呼び出されるのを待たずに次の命令をすぐに実行するためです。この場合、address1変数はまだ設定されていません。

あなたが実際に探しているのは、お住まいの地域とコールバック機能を受け入れる機能です。あなたがこのアドレスを使用したい他のファイルから、今

function getAddress(location, callback){ 
    geocoder.geocode({'latLng': location}, function(results, status){ 
     if(status === google.maps.GeocoderStatus.OK){ 
      if(results[0]){ 
       var address1 = results[0].formatted_address; 
       callback(address1); 
      } 
     } 
    }); 
} 

、あなたはこのように、この関数を呼び出すことができます:このような何かのアドレスが取得された後、

var location = new google.maps.LatLng(latitude, longitude); 
getAddress(location, function(address) 
{ 
    console.log(address); 
}); 

そしてここで、アドレスを受け入れることを定義した関数が呼び出され、アドレス変数が利用可能になります。

+0

私は、関数はオブジェクトであり、他の関数に渡して実行できることを理解しています。しかし、私は完全に非同期実行や、何かが実行終了しないと判断する方法を理解していません。 –

関連する問題