var timeout = function(delay){ var d = Q.defer(); setTimeout(function(){ $("body").append(delay).append("<br>"); d.resolve(delay); }, delay); return d.promise; }; Q.all([ timeout(5000), timeout(1000) ]).then(function(){ $("body").append("done").append("<br>"); });