Таймер уничтожается только с помощью нулевого присваивания вместо clearTimeout () - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь выяснить, почему моя простая функция газа не работает должным образом, уничтожив предыдущий таймер с помощью clearTimeout(). Это просто не работает, только null задание поднимает меня из этой ловушки ...

Есть идеи, почему? Спасибо

Код:

const throttler = ({ event, callback, delay, target }) => {
  let timerID = null
  const eventSubscribeTarget = target || window

  const resizeThrottler = () => {
    if (timerID) return

    timerID = setTimeout(() => {
      callback()
      timerID = null // <= only by null assigment it's gonna gone...
      // clearTimeout(timerID) doesn't work here
    }, delay)
  }

  eventSubscribeTarget.addEventListener(event, resizeThrottler, false)
}

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Результат setTimeout() всегда возвращает Number. Этот номер представляет значение идентификатора таймера, который установлен. Используйте это значение с методом clearTimeout() для отмены таймера.

Функция clearTimeout не сбрасывает число, поэтому вы должны установить timerID на null, если хотите повторно использовать эту переменную.

https://www.w3schools.com/jsref/met_win_settimeout.asp https://www.w3schools.com/jsref/met_win_cleartimeout.asp

0 голосов
/ 03 апреля 2019

(clearTimeout - clearInterval путаница в стороне ...) Здесь:

    if (timerID) return

Таким образом, установка значения timerId в значение null приведет к досрочному возвращению, новый таймаут не будет установлен. Полагаю, именно то, что мы ищем.

    timerID = setTimeout(() => {
      callback()
      timerID = null // <= only by null assigment it's gonna gone...
      // clearTimeout(timerID) doesn't work here

И вот, clearTimeout ничего бы не сделал - тайм-аут уже отмечен, обратный вызов уже вызван, тайм-аут на самом деле больше не существует. Функция выполняется прямо здесь и больше не будет. Если мы хотим предотвратить установку нового тайм-аута, то это

    timerID = setTimeout(() => {

- строка, которая не может быть выполнена.

...