???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)
一个简单的js队列,逻辑很清晰
原文地址:http://www.cnblogs.com/jiebba/p/7494981.html