Вы используете неправильный путь setTimeout
. Сигналом функции (одной из) является setTimeout(callback, delay)
. Таким образом, вы можете легко указать, какой код следует запускать после какой задержки.
var codeAddress = (function() {
var index = 0;
var delay = 100;
function GeocodeCallback(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
new google.maps.Marker({ map: map, position: results[0].geometry.location, animation: google.maps.Animation.DROP });
console.log(results);
}
else alert("Geocode was not successful for the following reason: " + status);
};
return function(vPostCode) {
if (geocoder) setTimeout(geocoder.geocode.bind(geocoder, { 'address': "'" + vPostCode + "'"}, GeocodeCallback), index*delay);
index++;
};
})();
Таким образом, каждый вызов codeAddress()
приведет к тому, что geocoder.geocode()
будет вызван через 100 мс позже после предыдущего вызова.
Я также добавил анимацию в маркер, чтобы у вас был приятный эффект анимации с добавлением маркеров для сопоставления один за другим. Я не уверен, каков текущий лимит Google, поэтому вам может потребоваться увеличить значение переменной delay
.
Кроме того, если вы каждый раз геокодируете одни и те же адреса, вместо этого вы должны сохранить результаты геокодирования на свой db, а в следующий раз просто используйте их (чтобы вы сэкономили некоторый трафик, и ваше приложение будет немного бит быстрее)