-
-
Notifications
You must be signed in to change notification settings - Fork 135
Open
Description
My code is as following:
constructor:()=>{
this.RateLimiterOnSeconds = new RateLimiter(4, 1*1000); // 5 requests per second
this.RateLimiterOnHours = new RateLimiter(2000, 1*1000*60*60); // 2000 request per hour
}
sendReq1: ()=>{
schedule(..)
}
sendReq2: ()=>{
schedule(...)
}
schedule: (fn)=>{
this.RateLimiterOnSeconds.removeTokens(1,(err, remainingRequests)=>{
this.RateLimiterOnHours.removeTokens(1, () => {
console.log('request executed in second...',new Date().getTime()/1000, remainingRequests);
fn();
});
});
}
The limit is exceeded.
Indeed, the console.log in the schedule() method prints:
request executed in second... 1487770295.951 4
request executed in second... 1487770296.043 4
request executed in second... 1487770296.219 4
request executed in second... 1487770296.258 4
request executed in second... 1487770296.427 4
request executed in second... 1487770296.56 4
request executed in second... 1487770296.628 4
request executed in second... 1487770296.803 4
request executed in second... 1487770296.831 4
request executed in second... 1487770296.921 4
request executed in second... 1487770297.126 4
request executed in second... 1487770297.214 4
request executed in second... 1487770297.311 4
request executed in second... 1487770297.421 4
request executed in second... 1487770297.605 4
request executed in second... 1487770297.686 4
request executed in second... 1487770297.803 4
and as you can see, in the second 1487770297 there are 7 requests (instead of 5), and number of tokens to remove is constant.
Metadata
Metadata
Assignees
Labels
No labels