I was using an asynchronous file uploader and, for usability, wanted to make sure the upload progress bar was displayed for at least a couple seconds before changing the view. The jQuery.Deferred object made this a breeze, eliminating a bunch of callback/isDone checking mess:
var uploadFinished = $.Deferred(),
timerFinished = $.Deferred();
$.when(uploadFinished, timerFinished).done(function () {
changeView();
});
// immediately after starting upload
setTimeout(timerFinished.resolve, 2000);
// in upload completed event handler
uploadFinished.resolve();
The docs make the Deferred object a little more complicated than it really is. You don’t have to have to alter processes to return Deferred/Promise objects, you can just make them and pass them around as needed in a pinch.