JS异步方案

本文介绍了一个基于ThenJS思想简化实现的异步任务处理库,该库移除了原ThenJS中不必要的部分,提供了chain、map及all等核心功能。
(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里我不想要的部分。。。

转载于:https://www.cnblogs.com/ss0102113/p/6101097.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值