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