Уменьшит время сетинтервала

Есть такой код нужно чтобы пока пользователь держит кнопку функция выполнялась, и чем дольше держит тем быстрее. У меня это не работает потому что событие mousedown по сути происходит 1 раз. И принимает первое значение переменный sec. Предлагали через промисы сделать я их еще не проходил. Есть какой то вариант усовершенствовать этот код?

let sec = 1000

decrease.addEventListener('mouseup', () => clearInterval(timeout));

decrease.addEventListener('mousedown', () => {

    timeout = setInterval(() => {

        decreaseFunc();

        sec -= 100;

        console.log(sec);

    }, sec);    
});

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

Автор решения: Ринат

Можно завести переменную mousepress и проверять истинность в интервальной функции

  let sec = 1000
  let mousepress = false;

  function intervalfunc(){
    decreaseFunc();  
    console.log(sec);
  }

  function  decreaseFunc() {
    if (mousepress) {
      sec -= 100;
      clearInterval(timeout); 
      timeout = setInterval(intervalfunc, sec);    
    }
  }

  decrease.addEventListener('mouseup', () => { mousepress=false; clearInterval(timeout);} );
  decrease.addEventListener('mousedown', () => { mousepress = true; timeout = setInterval(intervalfunc, sec); });
<button id="decrease"> click </button>

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

Можно что-то такое сделать..

let sec = 1000;

document.addEventListener('mouseup', () => clearInterval(timeout));

document.addEventListener('mousedown', () => { d() });

function d() {
  sec -= 50;
  if (sec < 50) sec = 50;
  timeout = setInterval(() => {
    console.log(sec);
    clearInterval(timeout);
    d();
  }, sec);
}

→ Ссылка