// function example
var timeout = function(delay){
var dfd = Q.defer();
setTimeout(function(){
$("body").append(delay).append("<br>");
dfd.resolve(delay);
}, delay);
return dfd.promise;
};
// qMap
var qMap = function(array, fn){
var dfd = Q.defer();
var index = 0;
(function next(){
var item = array[index];
if(index >= array.length) {
dfd.resolve();
return;
}
index++;
fn(item).then(next);
})();
return dfd.promise;
};
// execute function list
qMap(
[3000, 2000, 4000],
timeout)
.then(function(){
$("body").append("done").append("<br>");
});
External resources loaded into this fiddle: