If I have a 2 nested deferred objects and I'm waiting on both to finish, how can I ensure that their then completes before the outer then triggers? 
$.when($.ajax({
    method: 'PUT',
    url: someURL,
    data: {
        // My data
    },
    callback: function(r) {
        var deferred1 = $.Deferred();
        var deferred2 = $.Deferred();
        $.ajax({
            method: 'PUT',
            url: url1,
            data: {
                // My data
            }
        }).complete(deferred1.resolve);
        $.ajax({
            method: 'PUT',
            url: url2,
            data: {
                // My data
            }
        }).complete(deferred2.resolve);
        $.when(deferred1, deferred2).then(function() {
            self.parent.container.dialog('close').remove();
            self.parent.configurator.container.dialog('close').remove();
        });
    },
})).then(function() {
    // Some work; e.g. close a loading spinner
});
With the above code, immediately as deferred1 and deferred2 are resolved, the outer then is called before the inner then
 
    