Задать вопрос
dicem
@dicem

Как организовать выполнение функции в цикле с setInterval()?

Использую библиотеку Chartist для реализации построения графиков.
Вобщем мне необходимо реализовать добавление новых точек и соединений на графике в цикле при определенном интервале (допустим в 1-у секунду).
Нашел не совсем правильные ответы в постах:
Замыкания внутри циклов в JavaScript. Какова механика работы?
Замыкания внутри циклов javascript
Функции добавления точек и соединений уже присутствуют.
function addLineChart(array, label, series){
  var data = array.data || {};
  data.labels.push(label);
  data.series[0].push(series);
  array.update(data);
}


а вот собственно функция внутри который присутствует данный цикл
function demoRun(){
  var delay = 'delay';
  var delay_count, chart_update_count, event_percent, timer_delay;
  var pause = false;
  var i = 0;

  delay_count = radio_check(delay);
  switch (delay_count) {
    case 'fast_delay':
      delay_count = 0.5;
      chart_update_count = 2;
      event_percent = 1;
      timer_delay = 0.5;
      break;
    case 'realtime_delay':
      delay_count = 1;
      chart_update_count = 3;
      event_percent = 0.10;
      timer_delay = 1;
      break;
    case 'medium_delay':
      delay_count = 1.5;
      chart_update_count = 4;
      event_percent = 0.05;
      timer_delay = 2;
      break;
    case 'slow_delay':
      delay_count = 2;
      chart_update_count = 5;
      event_percent = 0.025;
      timer_delay = 3;
      break;
  }
  log_add('delay count = ' + delay_count);





    for(var i = 0; i < 10; i++) {
        (function(e) {
            setTimeout(function() {
                addLineChart(LineChart, 'fuck', Math.random());
            }, 1000);
        })(i);
    }

  i = 0;

}


Вобще ничего не понимаю, по данной реализации сетТаймаут отработает 1 раз, и то уже когда все итерации пройдут. А мне необходима отработка таймаута на каждой итерации.
Таймер 1 сек --> Функция --> Таймер 1 сек --> Функция --> Таймер 1 сек --> Функция --> итд итераций в указанном диапазоне цикла. Как быть?
  • Вопрос задан
  • 629 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 2
crazy_leo
@crazy_leo
Frontend Developer
Array.prototype.asyncEach = function (each, done) {
  var i = -1, a = this
  function iter() {
    if (++i === a.length) { done && done(); return }
    each.call(a, a[i], iter)
  }
  iter()
}

// Example
(new Array(10)).asyncEach(function (item, next) {
 setTimeout(function () {
   console.log("tick")
   next()
  }, 1000)
})
Ответ написан
Комментировать
undermuz
@undermuz
Full-Stack Developer
joxi.ru/vAWZB1kh1jwN82
https://jsfiddle.net/mkomvu9m/

var someFn = function()
{
  console.log( (new Date) );
};

var i = 0;
var  max = 10;
var _interval = setInterval(function() {
  if( i < max )
  {
    someFn();
    i++;
  } else {
    clearInterval( _interval );
  }
}, 1000);


Вместо someFn - addLineChart(LineChart, 'fuck', Math.random());

ПС:
setInterval - запускает переданную функцию раз в заданный промежуток времени
clearInterval - останавливает интервал
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы