qpp

1.1.6 • Public • Published

qpp

Promises Augmentation & Patterns

Build Status Dependency Status Coverage Status Gittip

NPM

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

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

Package Sidebar

Install

npm i qpp

Weekly Downloads

2

Version

1.1.6

License

MIT

Last publish

Collaborators

  • mprinc