node-squad
Version:
Run N functions in parallel, and wait for all of them to be finished before starting another batch
66 lines (47 loc) • 2.26 kB
Markdown
node-squad
==========
Run N functions in parallel.
When all the functions are finished, N new functions are triggered, until the input data set is drained.
This package is based on the excellent https://github.com/kriskowal/q <br>
It can be used for different purpose (API throttling, rate limiting, etc.).
## Getting Started
Install the module with: `npm install node-squad`
## Usage
node-squad accepts 3 input parameters :
- a data set (Array)
- a function taking one item of the dataset as a parameter (the function must return a result or a promise)
- the configuration hash (optional)
Configuration options:
- `config.squadSize` : the number of function to run at the same time (10 by default).
- `config.disableLogs` : yes, you already know what it does (false by default).
- `config.noCopy` : by default, node-squad uses a copy of the array passed as a parameter. Set this to true to use the original array instead of a copy.
- `config.stopOnReject` : stop the squad or not when a promise is being rejected by a job(true by default).
Example :
var Q = require('q'),
Squad = require('node-squad');
//copyright Montell Jordan
var dataSet = ['This','is','how','we','do','it'];
var config = {
squadSize:3,
disableLogs: false
};
Squad.run(dataSet,function(item){
var jobDeferred = Q.defer();
//waiting randomly
var randomWait = Math.floor(Math.random() * 1000) + 1;
setTimeout(function(){
jobDeferred.resolve(item+'♪');
},
randomWait);
return jobDeferred.promise;
},config)
.then(function(lyrics){
console.log('Finished processing all the data');
console.log(lyrics);
});
To run the example in this repo run `npm install` and then `node ./example/example.js`
Please note this is a firing squad, you won't always have N functions executing at the same time, each function will wait for **ALL OF THE OTHER** functions of the squad to be finished before starting another batch.
That's all folks!
## License
Copyright (c) 2014 Fabien Allanic
Licensed under the MIT license.