Skip to content

Instantly share code, notes, and snippets.

@amaraa87
Forked from tommmyy/ramdaDebounce.js
Created July 7, 2020 08:49
Show Gist options
  • Save amaraa87/6e6a3ff90e25c25644a98b792af71438 to your computer and use it in GitHub Desktop.
Save amaraa87/6e6a3ff90e25c25644a98b792af71438 to your computer and use it in GitHub Desktop.
Debounce function using Ramda.js
import { curry, apply } from 'ramda';
/**
* Debounce
*
* @param {Boolean} immediate If true run `fn` at the start of the timeout
* @param timeMs {Number} Debounce timeout
* @param fn {Function} Function to debounce
*
* @return {Number} timeout
* @example
*
* const say = (x) => console.log(x)
* const debouncedSay = debounce_(false, 1000, say)();
*
* debouncedSay("1")
* debouncedSay("2")
* debouncedSay("3")
*
*/
const debounce_ = curry((immediate, timeMs, fn) => () => {
let timeout;
return (...args) => {
const later = () => {
timeout = null;
if (!immediate) {
apply(fn, args);
}
};
const callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, timeMs);
if (callNow) {
apply(fn, args);
}
return timeout;
};
});
export const debounceImmediate = debounce_(true);
export const debounce = debounce_(false);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment