2014-10-28 3 views
0

Когда я просматриваю этот код, это поведение, которое я наблюдаю: код обработчика ответа пропускается до завершения оставшейся функции, а затем выполняется код обработчика. Это, конечно, не то, что я хочу, потому что код, который появляется после ответа, зависит от кода в обработчике ответа.Функция обратного вызова для Google Geocode API не выполняется немедленно

var geocoder = new google.maps.Geocoder(); 
function initializePlaces() { 
    var destination_LatLng; 
    var destination = document.getElementById("destination_address").value; 
    geocoder.geocode({'address': destination}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) 
     { 
      destination_LatLng = results[0].geometry.location; 
     } else if (status == google.maps.GeocoderStatus.ZERO_RESULTS) { 
      alert("Bad destination address."); 
     } else { 
      alert("Error calling Google Geocode API."); 
     } 
    }); 
    // more stuff down here 
} 

Что вызывает подобное поведение и как я могу изменить свой код, чтобы обеспечить обратный вызов перед кодом ниже?

+0

геокодирования работает асинхронно, вы не можете получить доступ результат внутри внешней функции –

+0

Спасибо. Продлил мой вопрос. – JamesGold

ответ

1

Geocode работает асинхронно, так что вы должны либо поместить этот код в функции обратного вызова, или сделать другую функцию обратного вызова:

geocoder.geocode({'address': destination}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) 
    { 
     destination_LatLng = results[0].geometry.location; 
    } else if (status == google.maps.GeocoderStatus.ZERO_RESULTS) { 
     alert("Bad destination address."); 
    } else { 
     alert("Error calling Google Geocode API."); 
    } 

    //put more stuff here instead 
}); 

или

function moreStuff(){ 
    //more stuff here 
} 


geocoder.geocode({'address': destination}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) 
    { 
     destination_LatLng = results[0].geometry.location; 
    } else if (status == google.maps.GeocoderStatus.ZERO_RESULTS) { 
     alert("Bad destination address."); 
    } else { 
     alert("Error calling Google Geocode API."); 
    } 

    moreStuff(); 
}); 
Смежные вопросы