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)
})
http://www.cnblogs.com/jiebba/p/6575214.html
http://www.cnblogs.com/jiebba 我的博客,来看吧!
如果有错误,请留言修改下 哦!