Какой лучший способ контролировать скорость цикла?

Я использую Geocoder API Google и достигаю ограничений скорости, используя цикл ниже. Какой лучший подход, чтобы замедлить это? results Длина массива варьируется, но не превышает 50 элементов.

for (var key in data) {
var results = data[key];
var address = results['Address'];

//test
if (geocoder) {
  geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      if (status != google.maps.GeocoderStatus.ZERO_RESULTS) {
      map.setCenter(results[0].geometry.location);

        var infowindow = new google.maps.InfoWindow(
            { content: '<b>'+address+'</b>',
              size: new google.maps.Size(150,50)
            });

        var marker = new google.maps.Marker({
            position: results[0].geometry.location,
            map: map, 
            title:address
        }); 
        google.maps.event.addListener(marker, 'click', function() {
            infowindow.open(map,marker);
        });

      } else {
        alert("No results found");
      }
    } else {
      alert("Geocode was not successful for the following reason: " + status);
    }
  });
}

1 ответ

Поместите весь код в ваш цикл внутри функции под названием mySuperCoolLoopFunction затем используйте этот код для вызова этой функции через указанный интервал:

var numberOfMilliseconds = 1000
setInterval(mySuperCoolLoopFunction, numberOfMilliseconds)

Вы можете прочитать все о функции setInterval Javascript здесь, как указал Пойнти. Первый аргумент - это функция, а второй аргумент - это количество миллисекунд ожидания до повторного вызова функции.

Вы можете назначить результат setInterval вызовите переменную, и это позволит вам остановить интервал в какой-то момент. Как это:

myInterval = setInterval(coolFunction, 1000)
...
clearInterval(myInterval)
Другие вопросы по тегам