rate-limit
Version:
Ensure that a series of functions are called with a minimum interval between each invocation.
41 lines (32 loc) • 756 B
JavaScript
exports.createQueue = createQueue;
function createQueue(rateLimit) {
var queue = []
var gap = rateLimit.interval;
var timeOfNextRequest = 0;
var waiting = false;
function next() {
if (queue.length === 0) {
waiting = false;
return;
}
var now = getNow();
if (now >= timeOfNextRequest) {
timeOfNextRequest = now + gap;
queue.shift()();
}
setTimeout(next, timeOfNextRequest - now);
waiting = true;
}
function add(func) {
queue.push(func);
if (!waiting) {
next();
}
}
return {
add: add
}
}
function getNow() {
return new Date().getTime();
}