1 /**
  2  * gowiththeflow.js - a javascript flow control micro library
  3  * https://github.com/jeromeetienne/gowiththeflow.js
  4 */
  5 WebAudio.Flow	= function(){
  6 	var self, stack = [], timerId = setTimeout(function(){ timerId = null; self._next(); }, 0);
  7 	return self = {
  8 		destroy : function(){ timerId && clearTimeout(timerId); },
  9 		par	: function(callback, isSeq){
 10 			if(isSeq || !(stack[stack.length-1] instanceof Array)) stack.push([]);
 11 			stack[stack.length-1].push(callback);
 12 			return self;
 13 		},seq	: function(callback){ return self.par(callback, true);	},
 14 		_next	: function(err, result){
 15 			var errors = [], results = [], callbacks = stack.shift() || [], nbReturn = callbacks.length, isSeq = nbReturn == 1;
 16 			for(var i = 0; i < callbacks.length; i++){
 17 				(function(fct, index){
 18 					fct(function(error, result){
 19 						errors[index]	= error;
 20 						results[index]	= result;		
 21 						if(--nbReturn == 0)	self._next(isSeq?errors[0]:errors, isSeq?results[0]:results)
 22 					}, err, result)
 23 				})(callbacks[i], i);
 24 			}
 25 		}
 26 	}
 27 };
 28