JavaScript « Цикл, где каждая итерация выполняется через некоторый промежуток времени.

Есть цикл. В нем есть вложенный цикл.
Задача в том чтобы выполнять каждую итерацию цикла через одну секунду(например). Но параметры главного цикла должны передаваться внутреннему.

Т.е. в конце каждого шага идет что-то типа sleep/delay.
Задача мне кажется совсем не тривиальной в реализации на javascript

1 ответов


Встречал такое. Поступил как.
setInterval и перекладываем все приращения цикла на вызываемый callback. Проверка условий осуществляется там же, по условию завершения цикла делается clearInterval. Доступ к объекту таймера будет возможен если он, например, глобальный (принадлежит window).

Вот пример:


var i = 0;
window.timer = setInterval(function() {
  alert(i)
  i++
  if (i==10) clearInterval(timer)
}, 1500)
 

Ну, для анимации должно подойти:


setInterval(function(){
    //actions..
    for (;;) {
        //...
    }
},1000);
 

Но он не будет ждать пока выполнится "итерация". Т.е. запуститься следующий вызов примерно через одну секунду после запуска текущего, даже если текущий еще не закончил что-то там отрисовывать.

Если нужно дождаться предыдущего, сделайте на таймаутах, как-то так:

(function animation() {
    //actions...
    setTimeout(animation,1000);
})();
 

Если вам нужно посчитать, например, точную скорость движения, чтоб она не менялась от FPS браузера - то погуглите requestAnimFrame