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;