Fix trailing edge issue in throttle #3053
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR to address issue #3051
Note: Given the state of flux of the repo, I was unable to run any scripts or tests, except for some local tests. There are also not any tests here, since they don't seem to be in this repo? Please advise.
Eventually I determined that the issue boils down to a fundamental incompatibility between the expectations for
debounce
and the expectations forthrottle
. Following the trailing edge,debounce
does not (and should not) care about the the amount of time elapsed before the next leading edge.throttle
does. There seem to be three possible approaches to resolving this:throttle
anddebounce
implementations again. No thanks.maxWait
in the name of House Throttle. In the original debounce-based throttle implementation, settingmaxWait
reset thelastCall
time to the time that the trailing edge created bymaxWait
was invoked (see here. This is ostensibly not correct, which is probably why the behavior was changed at some point.throttle
can utilize. This is the approach I went with.I added an option called
cooldown
which lets you specify the minimum amount of time that must elapse between a trailing edge and a leading edge. Calls todebounced
that occur in that interval are deferred until the end of that cooldown period (effectively creating a new trailing edge).