SO - 24931115

JavaScript

var arr = [syncFunction, returnsPromiseAsync, syncFunc2];

var d = $.Deferred().resolve();
while (arr.length > 0) {
   d = d.then(arr.shift()); // you don't need the `.done`
}

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