qpp
v1.1.6
Published
Promises Augmentation & Patterns
Downloads
36
Maintainers
Readme
qpp
Promises Augmentation & Patterns
Installation
npm install qpp --save
Features
Works in node and browser
Support for limiting a bandwidth of executing a set of function
- by the number of concurrent running functions
- (TODO) by the number of functions running at particular time period
Support for parallelism
- Semaphores
- single resource allocation
- support for naming consumers (great for debugging deadlocks and leaks)
- every time you call wait you can provide a name, and use it on signal
- you can also use auto-provided unique consumer id
- check unit test:
- file: test/semaphore.spec.js
- test: 'it should be possible to wait and signal from multiple callbacks'
- multiple resources allocation
- Semaphores hash
- collection of semaphores, each addressed by unique name
- Semaphores
Plans to add (please create new issue to ask for it)
- Time bandwidth
Usage
// Example of two consumers
var QPP = require('./..');
var s = new QPP.Semaphore('airstrip', 1);
// airplane (consumer) 1, waits for passengers to board
setTimeout(function(){
s.wait() // allocating the resource (airstrip), returns a promise
.then(function(){ // resource is available, consuming resource
console.log("Pilot 1: Yes! The airstrip is freee! We are the next one!");
setTimeout(function(){
console.log("Pilot 1: Ah, view is much better here!")
s.signal(); // releasing resource (airstrip)
}, parseInt(Math.random()*1500)+1);
});
}, parseInt(Math.random()*1500)+1);
setTimeout(function(){ // airplane (consumer) 2
s.wait() // allocating the resource (airstrip)
.then(function(){ // resource is available, consuming resource
console.log("Pilot 2: Great we are ready to departure, no one on the airstrip!");
setTimeout(function(){
console.log("Pilot 2: Dear passangers, enjoy our flight!")
s.signal(); // releasing resource (airstrip)
}, parseInt(Math.random()*2000)+1);
});
}, parseInt(Math.random()*1500)+1);
// For more examples, please check unit tests at @see qpp.Semaphore
Please check documentation for detailed documentation and basic examples.
For more detailed and complex examples, please check the test folder in the repository
Test
npm test
Release History
- 1.0.0 Initial release