2016-07-09 13 views
0

Ich habe diesen Code:Google Reverse geocode Rückgabevariable

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); 
}; 

Die erste console.log();, die aus wird kommentiert korrekt ist. Es enthält die formatierte Adresse. Die zweite console.log() an der Unterseite ist undefined. Was fehlt mir hier? Außerdem muss diese address1 Variable in eine übergeordnete JavaScript-Datei zurückgegeben werden, die dieses Skript direkt aufruft. obwohl Egal, was ich versuche, erhalte ich undefined überall, außer für lokal in geocoder.geocode();

Antwort

1

Sie haben ein Problem mit dem Verständnis der asynchronen Funktionen von Javascript und Callback-Funktionen

geocoder.geocode Funktion akzeptiert eine Callback-Funktion, wie es 2. ist Parameter. Diese Funktion wird immer dann asynchron aufgerufen, wenn die Adresse abgerufen wird.

Ihre console.log am Ende funktioniert nicht, weil nach dem Aufruf der geocoder.geocode() - Funktion das Programm nicht auf den Aufruf der Callback-Funktion wartet und stattdessen sofort die nächsten Anweisungen ausführt. In diesem Fall wurde die Variable address1 noch nicht gefüllt.

Was Sie eigentlich suchen, ist eine Funktion, die Ihren Standort und eine Rückruffunktion akzeptiert. Etwas wie folgt aus:

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); 
      } 
     } 
    }); 
} 

nun von der anderen Datei, die Sie diese Adresse in verwenden möchten, können Sie diese Funktion wie folgt aufrufen können:

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

Und hier, nachdem die Adresse abgerufen wurde, Ihre Funktion, die Sie mit der Annahme der Adresse definiert haben, wird aufgerufen und die Adressvariable steht Ihnen zur Verfügung.

+0

Ich verstehe, dass Funktionen Objekte sind, und an andere Funktionen übergeben und ausgeführt werden können. Ich verstehe jedoch nicht vollständig asynchrone Ausführung oder wie Sie feststellen, dass etwas nicht fertig ausgeführt wird. –