PassFront
  1. PassFront
  2. База знаний
  3. Асинхронность и Event Loop

Как можно остановить интервал?

Асинхронность и Event Loop

Интервал, запущенный через `setInterval`, останавливают функцией `clearInterval`, передав ей id, который вернул `setInterval`.

Как остановить

const intervalId = setInterval(() => {
  console.log('тик');
}, 1000);

clearInterval(intervalId); // остановить

setInterval возвращает идентификатор, который передаётся в clearInterval.

Остановка по условию

let count = 0;
const id = setInterval(() => {
  count++;
  console.log(count);
  if (count >= 5) clearInterval(id); // остановить изнутри
}, 1000);

В React — очистка при размонтировании

Обязательно очищать интервал в useEffect, иначе утечка памяти и обновление размонтированного компонента:

useEffect(() => {
  const id = setInterval(tick, 1000);
  return () => clearInterval(id); // очистка
}, []);

Детали

  • Без clearInterval интервал работает бесконечно.
  • Потеря id (переопределение переменной) делает интервал неостановимым.
  • Альтернатива для точности — рекурсивный setTimeout с clearTimeout.

Коротко для собеседования

Интервал останавливают через clearInterval(id), где id — возврат setInterval. Останавливать можно и изнутри по условию. В React обязательно чистить в useEffect (return () => clearInterval(id)), иначе утечка. Потеря id делает интервал неостановимым.

Другие вопросы раздела