JS异步方案
(function(){ function nextTick(fn){setTimeout(fn,0)} function getType(obj){return Object.prototype.toString.call(obj)} function isList(obj){return /Array|Arguments/.test(getType(obj))} function isFunc(obj){return /Function/.test(getType(obj))} function isNone(obj){return /Undefined/.test(getType(obj))} function func(fn){fn.apply(null,[].slice.call(arguments,1))} function run(fn,callback){nextTick(function(){fn(function(){callback()})})} function map(list,fn,callback){ var i,l=list.length,c=l-1; if(l){for(i=0;i<l;i++) (function(n,done){nextTick(function(){fn(list[n],done)})})(i,function(){!c--&&callback()});} else callback() } function all(list,callback){ var i,l=list.length,c=l-1; if(l){for(i=0;i<l;i++) (function(n,done){nextTick(function(){list[n](done)})})(i,function(){!c--&&callback()});} else callback() } function factory(callback,a,b){ var _next; if(isFunc(a)&&isNone(b)){_next=function(){run(a,callback)}} if(isList(a)&&isNone(b)){_next=function(){all(a,callback)}} if(isList(a)&&isFunc(b)){_next=function(){map(a,b,callback)}} return _next; } function Chain(a,b){ if(!(this instanceof Chain)) return new Chain(a,b); var self=this; self.chain=[]; self.chain.push(factory(function(){if(self.chain.length) nextTick(self.chain.shift())},a,b)) nextTick(self.chain.shift()); return self; } Chain.prototype.$=function(a,b){ var self=this; self.chain.push(factory(function(){if(self.chain.length) nextTick(self.chain.shift())},a,b)) return self; } window.Chain=Chain; })();
其实就是去掉了ThenJS里我不想要的部分。。。