Skip to content

Instantly share code, notes, and snippets.

@markandey
Created December 21, 2012 04:17
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save markandey/4350633 to your computer and use it in GitHub Desktop.
Save markandey/4350633 to your computer and use it in GitHub Desktop.
How to get output of multiple asynchronous calls in one callback.
function getGroupCallBackGenerator(timeOut,finalCallback){
var waitingStatus={};
var resultObject={};
var started=false;
var timedOut=false;
var timer=setTimeout(function(){
timedOut=true;
if(typeof(finalCallback)=="function"){
finalCallback(resultObject);
}
timer=false;
},timeOut);
function isAllDone(){
for(var ins in waitingStatus){
if(waitingStatus.hasOwnProperty(ins)){
if(waitingStatus[ins]){
return false;;
}
}
}
return true;
}
function tryToTriggerFinalCallback(){
if(!isAllDone()){
return;
}
if(timedOut){
return;
}
if(!started){
return;
}
if(typeof(finalCallback)=="function"){
if(timer){
clearTimeout(timer);
timer=false;
}
finalCallback(resultObject);
}
}
return {
'getCallback':function (instanceName){
if(waitingStatus[instanceName]!==undefined){
throw "Duplicate Instance Name, While Generating the Callback...";
}
waitingStatus[instanceName]=true;
return function(r){
resultObject[instanceName]=r||{};
waitingStatus[instanceName]=false;
tryToTriggerFinalCallback();
}
},
'start':function (){
started=true;
tryToTriggerFinalCallback();
},
'abort':function(){
started=false;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment