lo icon indicating copy to clipboard operation
lo copied to clipboard

Proposal: Add throttle

Open adrianrudnik opened this issue 2 years ago • 1 comments

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.

adrianrudnik avatar Nov 21 '23 01:11 adrianrudnik

I was looking for 'throttle' too.

Hi @samber, if there is no PR working on this currently. I would like to make one.

and Please pardon my absence of acknowledge on twitter, I don't have twitter account.

Lee-Minjea avatar Feb 13 '24 23:02 Lee-Minjea