JavaScript scheint nicht auf Rückgabewerte zu warten

Ich habe jetzt eine Weile damit zu kämpfen. Ich bin neu in Javascript und habe den Eindruck, dass der Code, den ich geschrieben habe, asynchron ausgeführt wurde. Hier ist ein allgemeines Beispiel:

Ich führe einen Code in Funktion a aus. Funktion A ruft dann Funktion B auf, die eine Variable an A zurückgeben muss, damit A sie in späteren Operationen verwenden kann. Es scheint jedoch, dass A, wenn es B aufruft, weiterhin seinen eigenen Code ausführt und nicht blockiert auf seinen Rückgabewert wartet, und B nicht schnell genug ist, sodass A den Punkt erreicht, an dem es den Rückgabewert hätte verwenden müssen Wert und ich bekomme eineundefinierter Variablentypfehler.

Die Art und Weise, wie ich damit umgegangen bin, ist, dass die Funktion A die Funktion B aufruft, die dann die Funktion C aufruft, die die späteren Operationen ausführen würde, die A mit dem Rückgabewert ausführen würde. Ich serialisiere meinen Code durch Aufrufe statt rücksendungen ... das ist aber umständlich ...

Hier ist ein Beispiel, wann es im aktuellen Code passiert:

function initialize() {
    //Geocode Address to obtin Lat and Long coordinates for the starting point of our map
    geocoder = new google.maps.Geocoder();
    var results = geocode(geocoder);
    makeMap(results[0].geometry.location.lat(), results[0].geometry.location.lng());

}

function geocode(geocoder) {
    //do geocoding here...

    var address = "3630 University Street, Montreal, QC, Canada";
    geocoder.geocode({ 'address': address }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
           return results;
            }
         else {
            alert("Geocode was not successful for the following reason: " + status);
        }
   });

}

function makeMap(lat, long) {
  //  alert(lat); for debuging
    var mapOptions = {
        center: new google.maps.LatLng(lat, long),
        zoom: 17,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
     map = new google.maps.Map(document.getElementById("map_canvas"),
        mapOptions);
}

Hinweis: initialize wird von body onload = "initialize ()" in meinem HTML aufgerufen.

Das Problem ist also, dass die makeMap die von der Geocode-Funktion erhaltenen Längen- und Breitengrade benötigt. In der Konsole wird jedoch ein Fehler angezeigt, der besagt, dass die Ergebnisse undefiniert sind. Was ist los? Ich komme aus Java und bin etwas verwirrt darüber, wie der Datenfluss hier in JS abläuft! Dies wird eine wertvolle Lektion für die Zukunft sein!

Zu einer Nebenfrage: Wie soll ich meine Funktionen auf externe Skripte aufteilen? Was ist eine gute Praxis? sollten alle meine funktionen in einer externen .js-datei zusammengefasst sein oder sollte ich funktionen zusammenfassen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage