JSFiddle - React, Tailwind, and code Playground
JavaScript
const throttle = (fn, delay) => {
let timeout;
let noDelay = true;
let queue = [];
const start = () => {
if (queue.length) {
const first = queue.shift();
fn.apply(first.context, first.arguments);
timeout = setTimeout(start, delay);
} else {
noDelay = true;
}
};
const ret = (...rest) => {
queue.push({
context: this,
arguments: [...rest]
});
if (noDelay) {
noDelay = false;
start();
}
};
ret.reset = () => {
clearTimeout(timeout);
queue = [];
};
return ret;
};
/* Usage */
const print = (number) => {
console.log(`Hello World! ${number}`);
}
const test = throttle(print, 3000);
test(1);
test(2);
test(3);
// test.reset();