2016-04-13 27 views
-1

Bazı google harita koordinatlarını bir dizide saklamam gerekiyor, koordinatlarını coğrafi kodlayıcı aracılığıyla elde ediyorum, böylece şehrin veya adresin adını geçiyorum ve koordinatlar.aynı sırada bir async yönteminin yanıtlarını soruyorlar

Coğrafi kodun bir eşzamanlama işlevi olması gerektiğini anladım, çünkü yanıtları bana sorduğum sırayla vermiyoruz. Böylece koordinatlar ihtiyacım olan farklı bir sırayla saklanır. Örneğin, barcelona -> paris -> barcelona için sorarsam, cevap barcelona -> barcelona -> paris veya paris -> barcelona -> barcelona'nın koordinatlarıdır. ya da paris -> roma -> oslo'ya sorarsam başka bir sırayla cevap verir.

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

Yanıtları doğru sırada depolamak için nasıl yapabilirim?

Eğer

cevap

1

Sen amaçla geri aramaları ile işe yarayabilir teşekkür ederim. Böyle bir işleve sizin coğrafi kodlama istekte bulunun:

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

, adres, lineCoordinates ve şehirlerin her biri için diziler var:

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

Şimdi böyle her callback'inde içinde işe yarayabilir. Bunu hurdaya atacağım, her şeyi içeren sadece bir dizi var, böylece koordinatlarını ve isimlerini kullanarak, talepte bulunduğunuz şehri bağlayabilirsiniz.

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