jack2
Version:
HTTP middleware for Node.js/Q-JSGI/JSGI2
30 lines (27 loc) • 801 B
JavaScript
var Q = require("q");
var Q_HTTP = require("q-http");
module.exports = function RateLimit(app, interval) {
var pending = [];
var inProgress = false;
function next() {
if (!inProgress) {
var p = pending.shift();
if (p) {
inProgress = true;
Q.when(app(p.request), function(response) {
p.deferred.resolve(response);
setTimeout(function() {
inProgress = false;
next();
}, interval);
});
}
}
}
return function(request) {
var deferred = Q.defer();
pending.push({ request: request, deferred: deferred });
next();
return deferred.promise;
}
}