Edit in JSFiddle

var d = new $.Deferred();
var pendingCall=0;

function logPendingCall(){   
    console.log("wait in queue..no." + pendingCall);
    if (pendingCall > 0) {
        setTimeout(logPendingCall, pendingCall * 1000);
        return d.promise();
    } else {
        d.resolve();
        return d.promise();
    }   
}

function show(num){
    alert(num);
}
var wrapper={
    test:function(num){
        logPendingCall().then(function() {
            show(num);
        });
    }
};
$("#test").click(function(){
    pendingCall-=1;
});

pendingCall+=1;
wrapper.test(1);
pendingCall+=1;
wrapper.test(2);
pendingCall+=1;
wrapper.test(2);
<input type='button' id="test" value="test"/>
<span>press test three times to trigger</span>