Based on lodash _.throttle.
Use case: I want to publish an update to a websocket at most any given time.Duration. So basically like the already existing debounce, but limiting with delay, not delaying until end.
Working with onboard functions, I came up with something like this:
delay := 500 * time.Millisecond
internalInvoke, cancel = lo.NewDebounceBy(delay, func(key int64, count int) {
// .... do stuff
})
throttle = func() {
internalInvoke(time.Now().Round(delay).UnixNano())
}
So in the end, calling throttle() will put the rounded nano time in a bucket for debounce and that bucket will be triggered after delay is no longer inside the same rounding range.
Not sure what to do with cancel though.
Based on lodash _.throttle.
Use case: I want to publish an update to a websocket at most any given
time.Duration. So basically like the already existing debounce, but limiting with delay, not delaying until end.Working with onboard functions, I came up with something like this:
So in the end, calling
throttle()will put the rounded nano time in a bucket for debounce and that bucket will be triggered afterdelayis no longer inside the same rounding range.Not sure what to do with
cancelthough.