一个简单的js队列,逻辑很清晰

    function Queue(type) { //type  是否是一个接着一个执行
        function QueueConst() {}
        QueueConst.execute_ing=[],
        QueueConst.execute_no=[],
        QueueConst.state=1,
        QueueConst.type = type?type:false
        QueueConst.prototype.stop=function () {//暂停
            QueueConst.state=2
            }
        QueueConst.prototype.reset=function () { //恢复
            QueueConst.state=3
            QueueConst.prototype.execute();
        }
        QueueConst.prototype.execute=function () { //执行队列
            if(QueueConst.state==2) return;
            var currentItem = null
            if(QueueConst.execute_ing.length>0){
                currentItem = QueueConst.execute_ing.shift()
                if(QueueConst.type){
                    currentItem(QueueConst.prototype.reset)
                    QueueConst.prototype.stop()
                }else {
                    currentItem()
                    QueueConst.prototype.execute()
                }
                  //执行当前
            }else {
                if(QueueConst.execute_no.length<1) {//完成队列里面的任务;
                    QueueConst.state = 1
                    return
                };
                QueueConst.execute_ing = QueueConst.execute_no
                QueueConst.execute_no=[]
                QueueConst.prototype.execute()
            }
        }
        QueueConst.prototype.add=function (item) {//添加任务
            QueueConst.execute_no.push(item)
            if(QueueConst.state==1) QueueConst.state=3
            QueueConst.prototype.execute();
        }
        return new QueueConst()
    }
    var que = Queue(true);
    que.add(function (next) {
        var index = 1;
        var loop = setInterval(function () {
            console.log(index++)
        },1000)
        setTimeout(function () {
            next();console.log('one')
            clearInterval(loop)
        },5000)
    })
    que.add(function (next) {
        var index = 1;
        var loop = setInterval(function () {
            console.log(index++)
        },1000)
        setTimeout(function () {
            next();console.log('two')
            clearInterval(loop)
        },3000)
    })
   setTimeout(function () {que.add(function (next) {console.log('three')})},10000)

  

 

http://www.cnblogs.com/jiebba/p/6575214.html 

http://www.cnblogs.com/jiebba    我的博客,来看吧!

posted @ 2017-09-08 15:44  小结巴巴吧  阅读(380)  评论(0编辑  收藏  举报