Search code examples
javascriptgoogle-geocoder

async calls to google service using javascript


I have one array

SchoolAddress[0] = Abelsvej 98, 4100, Ringsted;
SchoolAddress[1] = Prstevej 19, 4100, Ringsted;
SchoolAddress[2] = Haraldsvej 77, 4100, Ringsted;

I have to get latitude & longitude for this address.

I am using google geocoder for this.

for (var i = 0; i < schools.length; i++) 
{
    var address = schools[i][1];
    var geocoder = new google.maps.Geocoder();
    geocoder.geocode({ 'address': address }, function (results, status) 
    {
        var location = results[0].geometry.location;
        schoolslat[i] = location.lat() + ', ' + location.lng();
    });
} 

Here what happens is as call takes some time, the values coming from call do not go to proper schoolslat[i].


Solution

  • You may use closure to freeze variable i in your request:

    for (var i = 0; i < schools.length; i++) 
    {
        (function(i){
            var address = schools[i];
            var geocoder = new google.maps.Geocoder();
            geocoder.geocode({ 'address': address }, function (results, status) 
            {
                var location = results[0].geometry.location;
                schoolslat[i] = location.lat() + ', ' + location.lng();
            });
        }(i));
    }
    

    UPD:

    JSFiddle example.