Перезапустить setInterval

Описание

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

class Program
{
    FramesCount = 60;
}
setInterval
(
    function()
    {
        //Тут какие то действия
    }, 
    1000 / Program.FramesCount
);

Проблема в том что Program.FramesCount пользователь может изменить и в этот момент функция setInterval() должен выполнять те же самые действия только с новой задержкой.


Вопрос

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


Дополнение

Я искал в интернете на эту тему, наткнулся только на clearInterval, но как после этого запустить setInterval снова я так и не нашёл. Так что как ответ можете кидать ссылки на полезные статьи и другие сайты.


Ответы (2 шт):

Автор решения: vsemozhebuty

Можно, например, так, чтобы значение каждый раз считывалось заново:

setTimeout(foo, 1000 / Program.FramesCount);

function foo() {
  setTimeout(foo, 1000 / Program.FramesCount);
  //Тут какие то действия
}

Альтернативы:

  1. Связать перезапуск таймера с кодом, устанавливающим FramesCount.
  2. Проверять текущее значение FramesCount с переменной, хранящей прежнее значение, внутри foo и перезапускать таймер при изменении.

Возможно, проще изменить упомянутый фрагмент, чем менять всё это окружение. Но если постоянный пересчёт таймаута повлияет на производительность (сомневаюсь, но мало ли), альтернатива 1 может быть самой щадящей с точки зрения производительности, хотя и добавит связанности коду.

→ Ссылка
Автор решения: Константин

Можно просто определить setInterval в функцию и вызывать её после сброса

function playInterval() {
    intervalId = setInterval(
        function() {
            //Тут какие то действия
            if (условие, при котором сбрасывается интервал) {
                clearInterval(intervalId);
                setTimeout(()=>{
                    playInterval();
                }, 1000)
            }
        }, 
    ), 3000;
}

playInterval();
→ Ссылка