Zugriff auf das Array von außerhalb der Geocode-Schleife

Ich habe es geschafft, bis zu 10 Adressen zu geocodieren und der Karte eine Markierung hinzuzufügen, aber ich muss auf die Geocodierungsergebnisse außerhalb der Geocodierungsfunktion (codeAddress) zugreifen. Ich dachte, ich könnte die Ergebnisse in ein globales Variablenarray (userLat, userLng) übertragen. Anhand von Warnungen kann ich erkennen, dass die Schleife zwar die Ergebnisse zum Array innerhalb der Funktion hinzufügt, das Array jedoch außerhalb der Funktion wertlos ist.

Nebenbei bemerkt sollte die Warnung für eine nicht erfolgreiche Geokodierung die Adresse 'i' zurückgeben, abhängig davon, welche Adresse das Problem hatte, aber nur den letzten Adresswert der Schleife anzeigt.

Vielleicht hängen die Probleme zusammen? Ich denke, es kann etwas damit zu tun haben, dass ich die verschachtelte Funktion nicht verstehe.

Ich hoffe das ist klar. Vielen Dank im Voraus für jede Hilfe!

   function codeAddress() {

    var useradd = [];
    var geocoder = new google.maps.Geocoder();
    var howmany = parseFloat(document.getElementById("howmany").value);

    for (var i=0; i<howmany; i++) {
        useradd[i] = document.getElementById('address['+i+']').value;
        geocoder.geocode( {address: useradd[i]}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
                userLat.push(parseFloat(results[0].geometry.location.lat()));
                userLng.push(parseFloat(results[0].geometry.location.lng()));
                var marker = new google.maps.Marker({
                    map: map,
                    position: results[0].geometry.location
                });
            } 
            else {
                alert('Address ' + i + ' was not successfully located for the following reason: ' + status);
            }
        });
    };
}

Bearbeiten:

Ich bin nicht sicher, ob ich es richtig verstanden habe, habe aber die Rückruffunktion extrahiert und daraus eine neue Funktion erstellt, die vom Geocoder aufgerufen wird. Das Problem ist jedoch immer noch dasselbe und die Variablen userLat und userLng werden nicht außerhalb der Schleife übertragen. Irgendwelche Vorschläge?

FunktionscodeAddress () {

function callBack() {
    return function(results, status){
        if (status == google.maps.GeocoderStatus.OK) {
        userLat.push(parseFloat(results[0].geometry.location.lat()));
        userLng.push(parseFloat(results[0].geometry.location.lng()));
                var marker = new google.maps.Marker({
                    map: map,
                    position: results[0].geometry.location
                });
        } 
        else {
            alert('Address ' + i + ' was not successfully located for the following reason: ' + status);
        }
    }
}    

    var userLat = [];
            var userLng = [];
    var useradd = [];
    var geocoder = new google.maps.Geocoder();
    var howmany = parseFloat(document.getElementById("howmany").value);

    for (var i=0; i<howmany; i++) {
        useradd[i] = document.getElementById('address['+i+']').value;
        geocoder.geocode({address: useradd[i]}, callBack());
    };
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage