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. Redis基础---5个基本数据结构(比较性记忆)

    “ Redis是一个内存数据库,只用硬盘来进行持久化. Mongodb是半内存数据库 Mysql是硬盘数据库 ” 1. Redis启动 安装好了之后.运行redis-3.2.8/src/下的redis ...

  2. 6.12---bug

  3. Meta标签 h5

    一  PC端meta标签 1 页面关键词 <meta name="keywords" content="your tags"> 2 页面描述 < ...

  4. ubuntu下删除和新建用户(并有su权限)

    http://blog.csdn.net/speedme/article/details/8206144ubuntu下删除和新建用户(并有su权限) 如何创建ubuntu新用户?输入:sudo add ...

  5. zabbix3.0_网络发现问题

    问题1. Zabbix网络发现system.uanem找不到主机,打开zabbix_server.conf文件的debug DebugLevel=5 # 错误信息如下 # item [system.u ...

  6. R函数详解

    字符串连接函数paste 1.字符串连接:paste(..., sep = " ", collapse = NULL)sep表示分隔符,默认为空格.collapse表示如果不指定值 ...

  7. Analysis of container and Injection in Java, their history and future.

    Container: 发展历程: 2000 年的时候 FreeBSD 开发了一个类似于 chroot 的容器技术 Jails,这是最早期,也是功能最多的容器技术.Jails 英译过来是监狱的意思,这个 ...

  8. Ceres

    sudo apt-get install liblapack-dev libsuitesparse-dev libcxspares3.1.2 libgflags-dev libggoogle-glog ...

  9. java jvm eclipse 性能调优

    低配配置 -Dfile.encoding=UTF-8-Xms960m-Xmx960m-Xmn384m-Xverify:none-Xss256k-XX:MaxTenuringThreshold=2-XX ...

  10. HEVC-HM16.9源码学习(1)TEncCu::xCompressCU

    函数入口:Void TEncSlice::compressSlice的m_pcCuEncoder->compressCtu( pCtu );调用xCompressCU( m_ppcBestCU[ ...