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    我的博客,来看吧!

  • 相关阅读:
    如何用nodejs创建一个proxy 服务
    企业包分发-应用内安装时碰到的问题
    React-Native与Weex的比较
    前端炫酷动画展示利器(lottie)
    记录一个web开发工具集网页
    git 和 远程分支关联
    reference to 'X' is ambiguous 解决
    mac 下解压 .bin文件
    fabric 集成trello
    ES6 对象的创建及操作
  • 原文地址:https://www.cnblogs.com/jiebba/p/7494981.html
Copyright © 2011-2022 走看看