forked from alibaba/anyproxy
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathasyncTaskMgr.js
More file actions
52 lines (43 loc) · 1.48 KB
/
asyncTaskMgr.js
File metadata and controls
52 lines (43 loc) · 1.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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);
}
}
});
}
}
};
module.exports = asyncTaskMgr;