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

一个简单的js队列,逻辑很清晰的更多相关文章

  1. Java编程的逻辑 (61) - 内存映射文件及其应用 - 实现一个简单的消息队列

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  2. 简单的js队列

    简单的js队列 /** * [Queue] * @param {[Int]} size [队列大小] */ function Queue(size) { var list = []; //向队列中添加 ...

  3. BAT面试题:使用数组实现一个简单的阻塞队列

    这道题是我亲身经历的一道大厂面试题,非常值得分享! 这道题可以分为两个步骤进行编码解答,第一步是基于数组实现一个队列,第二步是实现线程阻塞. 如果是基于数组实现栈的数据结构,那么我们只需要一个指针进行 ...

  4. Java实现一个简单的循环队列

    在某些时候,我们不能被要求像数组一样可以使用索引随机访问,而是需要被限制顺序处理业务,今天介绍一种先进先出(FIFO)的线性数据结构:队列, 当然,还有后进先出(LIFO)的处理方式,即为栈(后续有时 ...

  5. 一个简单的js面试题

    在js群里看到有人发问,于是抱着练手的心态写了答了几个面试题,题目虽然不是太难,却很考验人的编程思维.汗颜,看了别人的答案后才发现自己好像笨了很多. 废话不说了 ,上代码. 1 要求 给一个数组的最后 ...

  6. 一个简单的 js 时间对象创建

    JS中获取时间很常见,凑凑热闹,也获取一个时间对象试试 首先,先了解js的获取时间函数如下: var myDate = new Date();          //创建一个时间对象 myDate.g ...

  7. Chart.js: 一个简单的 JS Chart Library

    Chart.js 是一个 Open Source 的 JavaScript Chart Library.它一共有 6 中 Chart,全都是 HTML5 based. 底下是 Chart.js 所提供 ...

  8. 一个简单的JS倒计时

    看到很多商城都是抢购倒计时的功能,今天闲来无事做了个倒计时.全当学习JS. 主要思路:主要用到Date对象,声明一个变量获取当前时间,在声明一个变量获取结束时间,结束时间-当前时间=剩余时间(倒计时) ...

  9. 一个简单的例子让你很轻松地明白JavaScript中apply、call、bind三者的用法及区别

    JavaScript中apply.call.bind三者的用法及区别 引言 正文 一.apply.call.bind的共同用法 二. apply 三. call 四. bind 五.其他应用场景 六. ...

随机推荐

  1. ACM_数数有多少(第二类Stirling数-递推dp)

    数数有多少 Time Limit: 2000/1000ms (Java/Others) Problem Description: 小财最近新开了一家公司,招了n个员工,但是因为资金问题,办公楼只有m间 ...

  2. ACM_01背包(恰好装满)

    背包2 Time Limit: 2000/1000ms (Java/Others) Problem Description: 有n个重量和价值分别为Wi,Vi的物品,现从这些物品中挑选出总量刚好为 W ...

  3. python获取主机名和用户名

    import socketimport getpassuser_name = getpass.getuser() # 获取当前用户名hostname = socket.gethostname() # ...

  4. JAVAEE 是什么,如何获取各种规范jar包及各种规范的jar包源码

    1.什么是JAVA EE JAVA EE是由一系列规范组成的,规范是由JCP制定的,并且提供了参考实现.规范(Specification)是一系列接口,不包含具体实现 有以下常见的JAVA EE实现, ...

  5. 【转】Java实现将文件或者文件夹压缩成zip

    转自:https://www.cnblogs.com/zeng1994/p/7862288.html package com.guo.utils; import java.io.*; import j ...

  6. mysql之replace into与 insert into duplicat key for update

    mysql实际应用中,我们在插入数据的时候,经常遇到主键冲突的情况,这是因为库中已经存在相同主键的数据,这时,我们只能更新数据:在判断是更新数据还是插入数据,我们还需要在此之前做一些必要的判断:在my ...

  7. centos服务器/dev/xvda1空间占满的解决方法

    突然线上Centos的机器磁盘空间占满报警,第一反映是日志文件很大,占用了较多的磁盘空间.于是简单的上去看了一下.但是发现线上不是的地址对应的空间占的并不多.用:df -h 命令看了一下,/dev/x ...

  8. Android RecyclerView嵌套EditView实时更新Item数据

    一.场景(例如:购物车) 1.当我们需要以列表样式管理某些数据时,可能需要列表项的某个字段可编辑 2.编辑Item上的某个字段后可能还要更新相关字段的值 二.可能遇到的问题 1.列表滑动导致输入框中的 ...

  9. Android 五种方式实现Android底部导航栏

    https://segmentfault.com/a/1190000007697941

  10. 安卓TV盒子常见问题以及解决方法

    1.为什么requestfocus无效 原因:requestfocus不支持在Touch模式下的Focus; 解法方案:再加一个requestFocusFromTouch函数. 2.摄像头打开问题,调 ...