Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

tenorok
Copy link

@tenorok tenorok commented May 6, 2020

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

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

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

@dfilatov
Copy link
Owner

dfilatov commented May 8, 2020

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

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

@tenorok tenorok force-pushed the debounce-invokeAsapFix branch from 20101ff to b06dc56 Compare May 9, 2020 14:16
@tenorok tenorok force-pushed the debounce-invokeAsapFix branch from b06dc56 to ebc5127 Compare May 9, 2020 14:18
@tenorok
Copy link
Author

tenorok commented May 9, 2020

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants