forked from YOURsammich/OldAwakens
-
Notifications
You must be signed in to change notification settings - Fork 1
/
throttle.js
42 lines (39 loc) · 1.16 KB
/
throttle.js
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
var THROTTLES = {};
var $ = require('jquery-deferred');
module.exports = {
on : function(id, max, resetTime) {
var done = $.Deferred();
var t = THROTTLES[id] = THROTTLES[id] || {
count : 0
};
if (!max) max = 10;
if (!resetTime) resetTime = 5000;
if (t.count === 0) {
setTimeout(function() {
if(THROTTLES[id].warn === undefined){
delete THROTTLES[id];
} else {
THROTTLES[id].count = 0;
}
}, resetTime);
}
if (++t.count > max) {
if(THROTTLES[id].warn >= 3){
done.reject();
} else {
done.resolve(false).promise();
}
} else {
done.resolve(true).promise();
}
return done.promise();
}, warn : function(id){
THROTTLES[id].warn = ++THROTTLES[id].warn || 1;
setTimeout(function() {
--THROTTLES[id].warn;
if(THROTTLES[id].warn === 0){
delete THROTTLES[id].warn;
}
}, 1800000);
}
};