-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathrateLimiter.js
More file actions
34 lines (28 loc) · 726 Bytes
/
rateLimiter.js
File metadata and controls
34 lines (28 loc) · 726 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
const LIMIT = 20;
const rateLimiter = (cb, limit) => {
const evenLimit = Math.floor(60000 / limit);
const stack = [];
let isCalled = false;
const callStack = () => {
if(isCalled) return;
isCalled = true;
setTimeout(() => {
if(stack.length){
stack.shift()();
isCalled = false;
callStack();
}
}, evenLimit);
}
return (value) => {
stack.push(cb.bind(this, value));
callStack();
}
}
const logUserDetails = (id) => {
console.log(`Current user id is ${id}`);
}
const limitizer = rateLimiter(logUserDetails, LIMIT);
for(let i=1; i<=LIMIT; i++){
limitizer(i);
}