SO - 24931115

by Vladimir Sobolev

JavaScript

var arr = [function(){return returnsPromiseAsync1()}, function(){return syncFunction()}, function(){return returnsPromiseAsync2()}, function(){return syncFunc2()}],
		step = 0;

var d = $.Deferred().resolve();

console.info('START');



while (arr.length > 0) {
   d = d.then(arr.shift()); // you don't need the `.done`
   console.info('step '+step++);
}
d.fail(function(){
functionFail(12);
});
d.done(function(){
functionDone(34);
});

function syncFunction(){
    console.log("Hello World 1");    
}
function returnsPromiseAsync1(){
    var d = $.Deferred();    
    setTimeout(function(){ console.log("a1"); d.resolve(""); },1000);
    return d.promise();
}
function returnsPromiseAsync2(){
    var d = $.Deferred();    
    setTimeout(function(){ console.log("a2"); d.resolve(""); },1000);
    return d.promise();
}
function syncFunc2(){
    console.log("Hello World 3");    
}

function functionFail() {

	console.info('FAILED '+n);
}
function functionDone(n) {
	console.info('FINISH '+n);
}