function Stack(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.reverse() 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 = Stack(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) }) que.add(function (next) { var index = 1; var loop = setInterval(function () { console.log(index++) },1000) setTimeout(function () { next();console.log('three') clearInterval(loop) },3000) })
我的博客,来看吧!
如果有错误,请留言修改下 哦!