$(function(){ // setTimeout with Deferred var $timeout = function(sec, message){ var defer = new $.Deferred(); setTimeout(function(){ console.log(message); defer.resolve(); }, sec * 1000); return defer.promise(); } $timeout(2, 'foo') .done(function(){ $timeout(1, 'bar'); }); })