jquery-plugins icon indicating copy to clipboard operation
jquery-plugins copied to clipboard

debounce: Параметр invokeAsap не должен отключать отложенный вызов

Open tenorok opened this issue 5 years ago • 2 comments

В статье https://habr.com/ru/post/60957/ сказано про debounce:

  1. ...
  2. Реальный вызов происходит сразу, а все остальные попытки вызова игнорируются, пока не пройдет время, большее или равное задержке, отсчитанной от времени последней попытки.

Но сейчас реализация не соответствует этому описанию, потому что при использовании второго варианта происходит только первый мгновенный вызов, а последний после окончания задержки не выполняется.

tenorok avatar May 06 '20 10:05 tenorok

Да, там код не совсем корректен. Но твой вариант тоже неправильно работает: если просто один раз позвать "задебаунсенную" функцию с invokeAsap=true, то это приведет к двум вызовам исходной функции, а так не должно быть. По-хорошему там нужен еще один флаг, который будет отвечать за то, что исходная функция была позвана в "invokeAsap" варианте и проверять это в вызове по таймеру, чтобы не звать ее второй раз.

Ps. А зачем ты это используешь? Это какое-то древнее говно мамонта )

dfilatov avatar May 08 '20 05:05 dfilatov

На работе случилось недопонимание касаемо debounce и throttle, ну я пошёл открывать твою статью на хабре, за неё отдельное спасибо, кстати, очень понятная :-) Потом заглянул в исходники и понял, что работает оно не так и решил исправить, тем более задача интересная.

Исправил. Дополнительной переменной здесь не отделаться, как я понимаю, потому что надо её как-то сбрасывать не только после череды вызовов, но и между отдельными одиночными вызовами, а запускать ещё один таймер кажется нерационально, поэтому пришёл к тому, что надо проверять время вызова.

tenorok avatar May 09 '20 14:05 tenorok