Skip to content

Proposal: Add throttle #396

@adrianrudnik

Description

@adrianrudnik

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions