dgilland / pydash

The kitchen sink of Python utility libraries for doing "stuff" in a functional way. Based on the Lo-Dash Javascript library.
http://pydash.readthedocs.io
MIT License
1.32k stars 93 forks source link

throttle behavior different from lodash: no trailing edge call #115

Open jd20 opened 6 years ago

jd20 commented 6 years ago

When using throttle from lodash, if one or more calls are made during the wait period, a single call will be scheduled at the end of the wait period (i.e. the trailing edge). For example:

const throttled = throttle(() => console.log("called"), 5000)
for (var i=0; i < 3; i++) throttled()

You should see the throttled function called twice. However, with pydash, I'm only seeing a single call. If using to check for updates to a resource, you might miss the last update as a result. Here's the equivalent pydash example that I tried:

throttled = throttle(lambda: print("called"), 5000)
[throttled() for _ in range(3)]

Just taking a quick look at the source, pydash's debounce is lacking lodash's leading / trailing options. If those were present and implemented, throttle could just be rewritten as a call to debounce (which is how lodash's throttle is done).

dgilland commented 6 years ago

Care to submit a PR?

jd20 commented 6 years ago

Sure, I'm backed up with other stuff right now, but I'll try to revisit this later when I get a chance.