2016-04-13 5 views
-1

Ich muss einige Google Maps-Koordinaten in einem Array speichern, ich erhalte die Koordinaten durch den Geocoder, so gebe ich den Namen der Stadt oder die Adresse und es gibt mich zurück die Koordinaten.Speichern von Antworten einer asynchronen Methode in der gleichen Reihenfolge, in der sie gefragt werden

Ich fand, dass Geocoder eine asynchrone Funktion sein muss, weil mir die Antworten nicht in der gleichen Reihenfolge geben, die ich sie frage. Also werden die Koordinaten in einer anderen Reihenfolge gespeichert, die ich brauche.

Zum Beispiel wenn ich nach Barcelona -> Paris -> Barcelona frage ist die Antwort immer die Koordinaten von Barcelona -> Barcelona -> Paris oder Paris -> Barcelona -> Barcelona. oder wenn ich frage paris -> rom -> oslo antwortet es in einer anderen reihenfolge.

var address = ['Barcelona', 'Viena','Oslo']; 
for (var i = 0; i < address.length; i++) { 
    geocoder.geocode({ 
     'address': address[i] 
    }, function (results, status) { 

     if (status === google.maps.GeocoderStatus.OK) { 
      lineCoordinates.push(results[0].geometry.location); 
      cities.push(results[0].address_components[0].long_name); 
      console.log("he terminado para:" + results[0].address_components[0].long_name); 
     } 
    }); 
} 

wie kann ich die Antworten in der richtigen Reihenfolge zu speichern, zu tun?

danke

Antwort

1

Sie könnten mit Rückrufen für Ihren Zweck arbeiten. Machen Sie Ihre Geocodierungsanfrage auf eine Funktion wie:

doGeocode (adress, postal_code, function (response1){ 
//Barcelona 
    doGeocode (adress, postal_code, function (response2){ 
    //Viena 

    doGeocode (adress, postal_code, function (response3){ 
     //Oslo 


     //here you have all your requested information from all 3 requests 
    )}; 
)}; 
)}; 
1

Sie haben Arrays für jede Adresse, lineCoordinates und Städte:

doGeocode: function (address, postal_code, callback) { 
console.log("TEST: " + address.toString()); 
var geocoder = new google.maps.Geocoder(); 
geocoder.geocode({ 
    'address': address, 
    'componentRestrictions': { 
     'postalCode': postal_code, 
     'country': 'de' 
    } 
}, function (results, status) { 
    if (status === google.maps.GeocoderStatus.OK) { 
     console.log(results); 
     callback(results); 
    } else { 
     //Error handling 
     alert('Geocode was not successful for the following reason: ' + status); 
    } 
}); 

Jetzt sind Sie in jedem Rückruf wie funktionieren könnte. Ich würde das verwerfen, habe nur ein Array, das alles enthält, so dass du die Stadt, in der du die Anfrage stellst, mit seinen Koordinaten und Namen binden kannst.

var cities = [ 
    { 
     name: 'Barcelona', 
     longName: '', 
     coordinates: '' 
    }, 
    { 
     name: 'Viena', 
     longName: '', 
     coordinates: '' 
    }, 
    { 
     name: 'Oslo', 
     longName: '', 
     coordinates: '' 
    } 
]; 

for (var i = 0; i < cities.length; i++) { 
    geocoder.geocode({ 
     'address': cities[i].name 
    }, function (results, status) { 
     if (status === google.maps.GeocoderStatus.OK) { 
      cities[i].coordinates = results[0].geometry.location; 
      cities[i].longName = results[0].address_components[0].long_name; 
     } 
    }); 
} 
Verwandte Themen