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

简介: function Queue(type) { //type 是否是一个接着一个执行 function QueueConst() {} QueueConst.execute_ing=[], QueueConst.
    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    我的博客,来看吧!

相关文章
|
JavaScript 前端开发
js事件队列
js事件队列
250 55
|
JavaScript 前端开发 API
详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务
该文章详细讲解了队列数据结构在前端开发中的应用,并深入探讨了JavaScript的事件循环机制,区分了宏任务和微任务的执行顺序及其对前端性能的影响。
|
存储 JavaScript 前端开发
js事件队列
【10月更文挑战第15天】
235 6
|
数据采集 JavaScript 前端开发
通过ClearScript V8在.NET中执行复杂JavaScript逻辑
爬虫技术是数据采集的关键手段。针对动态加载的网页,传统HTTP请求及HTML解析难以满足需求。本文章介绍如何利用ClearScript V8库在.NET环境中执行复杂的JavaScript逻辑,以提高爬虫对动态内容的抓取效率。文章首先概述了ClearScript V8的功能,如何处理如微博这类含有大量动态加载内容的网站。通过使用代理IP、设置cookie和user-agent等方式模拟真实用户访问,确保了爬虫的稳定性和隐蔽性。提供了一个具体的C#爬虫示例,演示如何结合ClearScript V8和HTTP客户端来实现上述功能。这种方法不仅增强爬虫的灵活性,也极大地提高数据采集的效率和可靠性。
516 1
通过ClearScript V8在.NET中执行复杂JavaScript逻辑
|
JavaScript 前端开发
JavaScript——一个简单的队列Demo
JavaScript——一个简单的队列Demo
133 4
|
JavaScript 前端开发
js事件队列
js事件队列
89 0
|
自然语言处理 JavaScript 前端开发
【JavaScript】JavaScript基础知识强化:变量提升、作用域逻辑及TDZ的全面解析
【JavaScript】JavaScript基础知识强化:变量提升、作用域逻辑及TDZ的全面解析
276 3
|
存储 前端开发 JavaScript
[初学者必看]JavaScript 简单实际案例练习,锻炼代码逻辑思维
【6月更文挑战第2天】这是一个前端小项目合集,包括图片轮播器、动态列表、模态框、表单验证等14个项目,旨在帮助初学者提升编码技能和实战经验。每个项目提供关键提示,如使用HTML、CSS和JavaScript实现不同功能,如事件监听、动画效果和数据处理。通过这些项目,学习者可以锻炼前端基础并增强实际操作能力。
680 2
|
前端开发 JavaScript 搜索推荐
[初学者必看]JavaScript 15题简单小例子练习,锻炼代码逻辑思维
【6月更文挑战第3天】这是一个JavaScript编程练习集,包含15个题目及答案:计算两数之和、判断偶数、找数组最大值、字符串反转、回文检测、斐波那契数列、数组去重、冒泡排序、阶乘计算、数组元素检查、数组求和、字符计数、数组最值和质数判断以及数组扁平化。每个题目都有相应的代码实现示例。
1238 1
|
JavaScript 前端开发
JS:类型转换(四)从底层逻辑让你搞懂经典面试问题 [ ] == ![ ] ?
JS:类型转换(四)从底层逻辑让你搞懂经典面试问题 [ ] == ![ ] ?