Вы можете вызвать geocode()
для следующего элемента в обратном вызове успеха, чтобы создать цепочку вызовов.Вызовы все еще будут асинхронными, но вы не геокодируете следующий, пока не закончится первый.Что-то вроде:
var addresses = [];
// this function really is optional, it's just copying an array
function startGeocoding() {
for (var x = 0; x < addresses2.length; x++) {
addresses.push(addresses2[x]);
}
geocode(addresses.shift());
}
function geocode(address) {
if (geocoder){
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
DoSomething();
if (addresses.length > 0) {
// take first value
geocode(addresses.shift());
}
}
});
}
}
Другой вариант может состоять в том, чтобы оставить все как есть, но поставить результаты в очередь, как-то отсортировать их, а затем поработать с ними после завершения всех синхронных вызововзаказ, который вы хотите.