Package Exports
- throttled-queue
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (throttled-queue) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
throttled-queue
This utility function allows throttling of a queue any arbitrary code. For example, making network calls to popular APIs such as Twitter is subject to rate limits. By wrapping all of your API calls in a throttle, it will automatically adjust your requests to be within the acceptable rate limits.
Installation
Can be used in a Node.js environment, or directly in the browser.
Node.js
npm install throttled-queue
Browser
<script src="throttled-queue.min.js"></script>
Usage
- If in node.js,
require
the factory function:
var throttledQueue = require('throttled-queue');
Else, include it in a script tag in your browser and throttledQueue
will be globally available.
- Create an instance of a throttled queue by specifying the maximum number of requests as the first parameter, and the interval in milliseconds as the second:
var throttle = throttledQueue(5, 1000); // at most 5 requests per second.
- Use the
throttle
instance as a function to enqueue actions:
throttle(function() {
// perform some type of activity in here.
});
Quick Examples
Basic
Rapidly assigning network calls to be run, but they will be limited to 1 request per second.
var throttledQueue = require('throttled-queue');
var throttle = throttledQueue(1, 1000); // at most make 1 request every second.
for (var x = 0; x < 100; x++) {
throttle(function() {
// make a network request.
});
}
Reusable
Wherever the throttle
instance is used, your action will be placed into the same queue,
and be subject to the same rate limits.
var throttledQueue = require('throttled-queue');
var throttle = throttledQueue(1, 60 * 1000); // at most make 1 request every minute.
for (var x = 0; x < 50; x++) {
throttle(function() {
// make a network request.
});
}
for (var y = 0; y < 50; y++) {
throttle(function() {
// make another type of network request.
});
}
Bursts
By specifying a number higher than 1 as the first parameter, you can dequeue multiple actions within the given interval:
var throttledQueue = require('throttled-queue');
var throttle = throttledQueue(10, 1000); // at most make 10 request every seconds.
for (var x = 0; x < 100; x++) {
throttle(function() {
// This will fire at most 10 a second, as rapidly as possible.
});
}
Evenly spaced
You can space out your actions by specifying true
as the third (optional) parameter:
var throttledQueue = require('throttled-queue');
var throttle = throttledQueue(10, 1000, true); // at most make 10 request every seconds, but evenly spaced.
for (var x = 0; x < 100; x++) {
throttle(function() {
// This will fire at most 10 requests a second, spacing them out instead of in a burst.
});
}
Tests
Note: The tests take a few minutes to run. Watch the console to see how closely the actual rate limit gets to the maximum.
Node.js
Run npm test
.
Browser
Open test/index.html
in your browser.