
Wording was ungrammatical and hard to understand. I made my best guess as to what you want to say. However, it is not clear from the description or the examples whether the debounce wrapper should inhibit calls attempted ms milliseconds after the last call that wasn't ignored, or ms milliseconds after the last call that was attempted, even if it was ignored. I would think it would be the former, but the example could go either way. If the f(4) example used 1000 or 1001 ms and still runs, that would clear it up. If it has to be 1100 like it is, that would suggest that it's the second scenario above. In my propsed change I preserved the ambiguity.
840 B
840 B
importance: 5
Debounce decorator
The result of debounce(f, ms)
decorator should be a wrapper that passes the call to f
at maximum once per ms
milliseconds.
In other words, when we call a "debounced" function, it guarantees that all future calls to the function made less than ms
milliseconds after the previous call will be ignored.
For instance:
let f = debounce(alert, 1000);
f(1); // runs immediately
f(2); // ignored
setTimeout( () => f(3), 100); // ignored ( only 100 ms passed )
setTimeout( () => f(4), 1100); // runs
setTimeout( () => f(5), 1500); // ignored (less than 1000 ms from the last run)
In practice debounce
is useful for functions that retrieve/update something when we know that nothing new can be done in such a short period of time, so it's better not to waste resources.