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


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

智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告