UNPKG

rate-limit

Version:

Ensure that a series of functions are called with a minimum interval between each invocation.

41 lines (32 loc) 756 B
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(); }