** this is still a draft **

Stackable is a small library to handle multiple callbacks for your event based environment.
Basically it allows to chain, at run time, any number of synchronous or asynchronous functions and use it like a normal synchronous function (or asynchronous with the Deferred/Promise pattern).

Here some example:

var callback = $function(
  function(arg) {
    console.log('Function n.1',arg);
    },
  function(arg) {
    console.log('Function n.2',arg);
    });
  );

// functions will be called in the same order they are defined
callback.call(my_context,'my param');
// will produce output:
// Function n.1 'my param'
// Function n.2 'my param'

// Or even better you could use the Defferred/Promise pattern
$.when(callback.promise('my param'))
  .done(function() {
    console.log('Finished!');
    // will produce output:
    // Function n.1 'my param'
    // Function n.2 'my param'
    // Finished!
    });

Suppose now you want to add an asynchronous function to the stack, just use the push() method to enqueu it, like a normal array.
Here is useful the Deferred/Promise pattern: if at some point you need to add an asynchronous function, you don’t need to change anything in the part of the code that calls the callback function:

callback.push(function() {
  setTimeout(function(arg) {
    console.log('Function n.3',arg);
    },1000);
  });
 
// below doesn't change
$.when(callback.promise('my param'))
  .done(function() {
    console.log('Finished!');
    // will produce output:
    // Function n.1 'my param'
    // Function n.2 'my param'
    // Function n.3 'my param'
    // Finished!
    });

More

More about Stackable