Async Recursive Function

by Galo Aragoneses

JavaScript

var arrayIframes = [1,2,3,4,5,6];
var contImages = 0;

function finishedGetImagesCallback() {
  	$('body').append($('<div>Get Images - Finish</div>'))
}

GetImagesFromIframes(arrayIframes, finishedGetImagesCallback);

function GetImagesFromIframes(array, callback) {

	if(!array.length){ 
  	callback();
    return;
  }

	$.when(getImagePPTAsync(array.shift()))
  	.then(function(imageSrc) {
  
  		$('body').append($('<div>' + imageSrc + '</div>'));
    	GetImagesFromIframes(array, callback); 
    });

}

function getImagePPTAsync(identifier) {
  
  //_isAsyncRequest is Mock variable to decide if the call is asynchronous (setTimeout)
  var _isAsyncRequest = contImages % 2 == 0;
  
  //imageSrc represents the response of the asynchronous function or of which it is not
  var imageSrc = 'imageSrc' + identifier;
  
  if(_isAsyncRequest) {
		
    //return promise
  	var $def = $.Deferred();
    
  	setTimeout(function() {
    	contImages++;
  		$def.resolve(imageSrc);
  	}, '1000');
  
  	return $def.promise();
    
  } else {
  
  	//Return sync
   	contImages++;
  	return imageSrc;
  }
  
}