valvelet
!Version npmnpm-valvelet-badgenpm-valvelet
!Build Statustravis-valvelet-badgetravis-valvelet
!Coverage Statuscoverage-valvelet-badgecoverage-valveletThis is a small utility to limit the execution rate of a function. It is useful for scenarios such as REST APIs consumption where the amount of requests per unit of time should not exceed a given threshold.
This module is very similar to
node-function-rate-limit
function-rate-limit.
The difference is that valvelet
works seamlessly with promise-returning
functions.Install
npm install --save valvelet
API
The module exports a single function that takes four arguments.valvelet(fn, limit, interval[, size])
Returns a function which should be called instead of fn
.Arguments
fn
- The function to rate limit calls to.limit
- The maximum number of allowed calls perinterval
.interval
- The timespan wherelimit
is calculated.size
- The maximum size of the internal queue. Defaults to 2^32 - 1 which is
Return value
A function that returns a promise which resolves to the value returned by the originalfn
function. When the internal queue is at capacity the returned
promise is rejected.Example
const valvelet = require('valvelet');
const get = valvelet(function request(i) {
return Promise.resolve(`${i} - ${new Date().toISOString()}`);
}, 2, 1000);
function log(data) {
console.log(data);
}
for (let i = 0; i < 10; i++) {
get(i).then(log);
}
/*
0 - 2016-06-02T20:07:33.843Z
1 - 2016-06-02T20:07:33.844Z
2 - 2016-06-02T20:07:34.846Z
3 - 2016-06-02T20:07:34.846Z
4 - 2016-06-02T20:07:35.846Z
5 - 2016-06-02T20:07:35.846Z
6 - 2016-06-02T20:07:36.848Z
7 - 2016-06-02T20:07:36.848Z
8 - 2016-06-02T20:07:37.851Z
9 - 2016-06-02T20:07:37.851Z
*/