 <p>I would probably choose not to do it this way, but a deferred/promise can indeed be used as a queuing device.</p> <p>You need a slight(?) variation of what you already tried.</p> <pre><code>self.queue = $.when();//A resolved promise, used to form a queue of functions in a .then() chain. self.save = function(data) { var dfrd = $.Deferred();//A Deferred dedicated to this particular save. self.queue = self.queue.then(function() { return $.post("/example_save_endpoint", data) //Make the AJAX call, and return a jqXHR to ensure the downstream queue waits for this jqXHR to resolve/reject. .then(dfrd.resolve, dfrd.reject) //Resolve/reject the Deferred for the caller's benefit .then(null, function() { //Force failure down the success path to ensure the queue is not killed by an AJAX failure. return $.when();//Return a resolved promsie, for the queue's benefit. }); }); return dfrd.promise();//allow the caller to do something when the AJAX eventually responds } </code></pre> <p><em>For explanation, see comments in code</em></p>