anyproxy/lib/asyncTaskMgr.js

53 lines
1.5 KiB
JavaScript
Raw Normal View History

2014-08-11 16:43:14 +08:00
function asyncTaskMgr(){
var self = this;
self.callbackList = {
sampleName:{
status:0, /* 0,stopped,will not callback / 1,loading / 2,loaded */
result:null,
callbackList:[]
}
}
self.addTask = function(name,cb,action){
if(self.callbackList[name]){
var task = self.callbackList[name];
if(task.status == 2){ //done
cb && cb.apply(null,task.result);
}else if(task.status == 1){ //pending
task.callbackList.push(cb);
}else if(task.status == 0){ //stopped
return; //do nothing
}
}else{
var task;
task = self.callbackList[name] = {
status : 1,
result : null,
callbackList : [cb]
};
action && action.call(null,function(){ //action应该带一个回调
if(arguments && arguments[0] === -1){ //返回第一个参数为-1为停止任务
task.status = 0;
task.callbackList = [];
}else{
task.result = arguments;
task.status = 2;
var tmpCb;
while(tmpCb = task.callbackList.shift()){
tmpCb && tmpCb.apply(null,task.result);
}
}
});
}
}
2014-08-13 17:30:16 +08:00
2014-08-11 16:43:14 +08:00
};
module.exports = asyncTaskMgr;