Запуск функции каждые 60 секунд: авто-вызов через setInterval()

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Вызов функции каждые 60 секунд в JavaScript можно осуществить с использованием setInterval:

JS
Скопировать код
setInterval(() => console.log('Ещё минута пролетела 😮'), 60000);

Этот код устанавливает таймер, который запускает анонимную функцию через каждые 60 000 миллисекунд. Вы можете настроить вывод сообщения в консоли или выполнение других действий по своему усмотрению.

Для остановки таймера возможно использовать clearInterval, передав ему идентификатор интервала, возвращаемый функцией setInterval:

JS
Скопировать код
let intervalId = setInterval(() => console.log('Сообщение каждые 60 секунд!'), 60000);

// Когда потребуется остановить выполнение
clearInterval(intervalId);

Если задача сложна, и возникает опасность того, что вызовы начнут перекрываться, можно воспользоваться setTimeout с рекурсивным вызовом для точного управления интервалами:

JS
Скопировать код
function repeatEvery60Seconds() {
  console.log('Ещё минута пролетела, а я продолжаю работать 💪');
  setTimeout(repeatEvery60Seconds, 60000);
}

repeatEvery60Seconds();
Кинга Идем в IT: пошаговый план для смены профессии

Обзор таймеров JavaScript

Рассмотрим разницу между setInterval и setTimeout:

  • setInterval: устанавливает периодический вызов функции через определённые интервалы времени. Учтите, что если функция занимает существенное время, вызовы могут накладываться.
  • setTimeout: вызывает функции лишь единожды, но спустя определённую задержку. Рекурсивное применение с setTimeout исключает перекрывания вызовов и позволяет точнее контролировать интервалы.

Какой из методов выбрать, зависит от особенностей вашей функции и различных требований к ней.

Стратегия применения таймеров JavaScript

Читаемость кода

С целью повышения читаемости кода и упрощения отладки рекомендуется использовать именованные функции:

JS
Скопировать код
function logMessage() {
  console.log("Меня зовут logMessage, и мне это нравится 😎");
}

setInterval(logMessage, 60000);

Тяжёлые задачи

Если ваша функция выполняет обширные вычисления, используйте рекурсивный setTimeout, чтобы предотвратить перекрывание вызовов:

JS
Скопировать код
function heavyLifter() {
  // Выполняем что-то важное...
  setTimeout(heavyLifter, 60000);
}

heavyLifter();

Проверка DOM

Перед обновлением DOM-элементов убедитесь, что они существуют, чтобы избежать утечек памяти:

JS
Скопировать код
setInterval(() => {
  let container = document.getElementById('ice-cream-container');
  if(container){
    container.textContent = 'Подается новая порция каждые 60 секунд!';
  }
}, 60000);

Визуализация

Представьте себе часовую башню (🕰️) на городской площади:

Markdown
Скопировать код
Каждый час она оглашает звон: **ДОНГ**
JS
Скопировать код
setInterval(() => {
  🕰️.toll(); // **ДОНГ** Пробил час!
}, 60000 * 60);  // Каждые 60 минут

Функции JavaScript, вызываемые с интервалом, можно представить в виде:

Markdown
Скопировать код
🕰️: [Час 1, Час 2, Час 3, ..., Час 24]

Каждое биение часов:

Markdown
Скопировать код
Функция ⏰ => 🔄 Каждые 60 секунд.

Сообщает, что минута прошла.

Утилиты планирования для прокачки

Динамическое планирование

Для настройки динамических интервалов фиксируйте время выполнения задачи и затем рассчитывайте задержку для следующего вызова:

JS
Скопировать код
function performTask() {
  let start = Date.now();

  // Выполнение задачи

  let end = Date.now();
  let duration = end – start;
  setTimeout(performTask, Math.max(0, 60000 – duration));
}
performTask();

Практичный пример использования

setInterval подходит для регулярных проверок или запросов к серверу:

JS
Скопировать код
setInterval(() => {
  fetch('https://api.myapp.com/data')
    .then(response => response.json())
    .then(data => updateDomOrState(data))
}, 60000);

Условные интервалы

Остановите зацикленный вызов функции, когда достигнуто определённое условие, чтобы не тратить лишние системные ресурсы:

JS
Скопировать код
let intervalId = setInterval(() => {
  if(weGotAWinner()) {
    clearInterval(intervalId);
  }
  // Продолжение работы программы
}, 60000);

Ответственное использование таймеров в JavaScript

Таймеры могут быть полезны, но их следует использовать осознанно:

  • Ограничивайте использование интервалов, чтобы предотвратить ухудшение производительности и утечки памяти.
  • Всегда ликвидируйте таймеры при удалении связанных с ними DOM-элементов.
  • Учтите, что setInterval не обеспечивает точности на неактивных или перегруженных вкладках.
  • Для задач, критичных к обработке в обозначенное время, рассмотрите использование серверных таймеров или технологии Web Workers.

Полезные материалы

  1. Глобальная функция setInterval() – Веб-API | MDN — исчерпывающий гид по setInterval.
  2. JavaScript Timing Events — подробный учебник с примерами.
  3. Планирование: setTimeout и setInterval — глубокий анализ механизма планирования.
  4. Как остановить вызов setInterval в JavaScript – Stack Overflow — решения от профессионального сообщества.
  5. Таймеры | Документация Node.js v21.6.1 — официальная документация Node.js.
  6. Обработка событий :: Красноречивый JavaScript — детальная глава об использовании таймеров в JS.
Свежие материалы