zoukankan      html  css  js  c++  java
  • 一个简单的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    我的博客,来看吧!

  • 相关阅读:
    三者最大实例分析
    Python eval函数
    Linux查看某个进程的线程
    将列表传递给函数
    二十四、二进制日志截取与恢复
    二十三、二进制日志事件
    二十二、二进制日志记录方式
    二十一、二进制日志介绍
    二十、错误日志
    十九、InnoDB核心参数
  • 原文地址:https://www.cnblogs.com/jiebba/p/7494981.html
Copyright © 2011-2022 走看看