Декоратор не выводит значение

function f(x) {
  alert(x)
}

function debounce(func, ms) {

  let isCooldown = false;

  return function(x) {
    if (isCooldown) return;

    func.apply(this, arguments);

    isCooldown = true;

    setTimeout(() => isCooldown = false, ms);
  };
}

let f = debounce(f, 1000);

f(1);
f(2);

Должно выводить 1, 2 спустя 1000ms, но ничего не выводит, в чем ошибка?


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

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

function f(x) {
  console.log(x);
}

function debounce(func, ms) {

  let isCooldown = false;

  return function(x) {
    if (isCooldown) return;

    func.apply(this, arguments);

    isCooldown = true;

    setTimeout(() => isCooldown = false, ms);
  };
}

f = debounce(f, 1000);

f(1);
setTimeout(f, 500, 2);
setTimeout(f, 1500, 3);

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

Во первых у вас ошибка декларации, поэтому код не работает.

Во вторых У вас код не будет выводиться 1 и 2 через время, так как вы его не вызываете в таймауте, а перед ним.

В третьих у вас выводится 1, потом вы меняете isCooldown = true; и запускаете вторую функцию, которая не будет ждать таймаут. Во второй функции условие не выполняется и она сразу прекращает работу.

Если напишите, что нужно сделать, то можно будет помочь, а так не понятно зачем такие конструкции.

→ Ссылка