Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как выполнять код через равные промежутки времени

Короткий ответ

setInterval() вызывает функцию снова и снова с заданной паузой. clearInterval() её останавливает:

let count = 0;
const timer = setInterval(() => {
  count++;
  console.log('tick', count);
  if (count === 3) clearInterval(timer);
}, 200);

Результат:

tick 1
tick 2
tick 3

Обратный отсчёт

Тот же приём отсчитывает время назад и останавливается на нуле:

let seconds = 3;
const timer = setInterval(() => {
  console.log(seconds > 0 ? seconds : 'Start!');
  if (seconds === 0) clearInterval(timer);
  seconds--;
}, 100);

Результат:

3
2
1
Start!

Цепочка setTimeout

Для запросов лучше планировать следующий вызов только после завершения предыдущего. Тогда вызовы не накладываются друг на друга:

async function poll() {
  const response = await fetch('/api/status');
  showStatus(await response.json());
  setTimeout(poll, 5000);
}
 
poll();

Частая ошибка

Без clearInterval() интервал работает вечно, даже когда он больше не нужен. Всегда сохраняйте идентификатор, чтобы его можно было остановить:

const timer = setInterval(() => {}, 1000);
clearInterval(timer);
 
console.log('interval stopped');

Результат:

interval stopped

Функции из этого ответа

  • setInterval — Выполняет функцию снова и снова с заданным интервалом.
  • clearInterval — Останавливает повторяющийся setInterval.
  • setTimeout — Выполняет функцию один раз через заданное время.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.