-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathc-throttle.js
More file actions
46 lines (36 loc) · 781 Bytes
/
c-throttle.js
File metadata and controls
46 lines (36 loc) · 781 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
'use strict';
// Function throttling, executed once per interval
const throttle = (delay, f, ...args) => {
let timer;
let pendingArgs = null;
const throttled = () => {
timer = undefined;
if (pendingArgs) {
wrapped(...pendingArgs);
pendingArgs = null;
}
};
const wrapped = (...params) => {
if (!timer) {
timer = setTimeout(throttled, delay);
return f(...args, ...params);
}
pendingArgs = params;
return null;
};
return wrapped;
};
// Usage
const fn = (...args) => {
console.log('Function called, args:', args);
};
const ft = throttle(200, fn, 'throttled');
let calls = 0;
const timer = setInterval(() => {
calls++;
fn(calls);
ft(calls);
}, 50);
setTimeout(() => {
clearInterval(timer);
}, 2000);