A promise based throttler responsible for limiting execution of parallel tasks. The number of parallel tasks may be limited and configured per type.
$ npm install p-throttler
Constructs a new throttler.
The defaultConcurrency
is the default maximum concurrent functions being run (-1 to specify no limits).
The types
allows you to specify different concurrencies for different types.
Example:
var throttler = PThrottler.create(15, { // or new PThrottler()
'network_io': 10,
'disk_io': 50
});
Enqueues a function to be ran. The function is expected to return a promise or a value.
The returned promise is resolved when the function finishes execution.
The type
argument is optional and can be a string
or an array of strings
.
Use it to specify the type(s) associated with the function.
The function will run as soon as a free slot is available for every type
.
If no type
is passed or is unknown, the defaultConcurrency
is used.
The execution order is guaranteed for functions enqueued with the exact same type
argument.
Example:
var method = function () {
return Q.resolve('foo');
};
var throttler = PThrottler.create(15, {
'foo': 1,
'bar': 2
});
// Single type, will only run when a free slot for
// "foo" is available
throttler.enqueue(function () {
return method(); // method() returns some promise
}, 'foo')
.then(function (value) {
console.log(value);
});
// Multiple type, will only run when a free slot for
// "foo" and "bar" are available
throttler.enqueue(function () {
return method(); // method() returns some promise
}, ['foo', 'bar'])
.then(function (value) {
console.log(value);
});
Aborts all current work being done.
Returns a promise that is resolved when the current running functions finish to execute.
Any function that was in the queue waiting to be ran is removed immediately.
$ npm test
Released under the MIT License.