Ответ 1
Что вам нужно сделать, это связать весь ваш запрос с одним основным отложенным объектом и зарегистрировать все ваши обратные вызовы по его обещанию. Мастер отложенного объекта должен будет прослушивать отдельные запросы и соответствующим образом решать. Самый простой способ достичь этого - определить все отложенные объекты спереди, чтобы избежать проблемы с курицей и яйцом:
var d1 = $.Deferred();
var d2 = $.Deferred();
var def = $.when(d1, d2);
def.done(function() {
alert(1);
});
setTimeout(function() {
d1.resolve();
}, 3000);
def.done(function() {
alert(2);
});
setTimeout(function() {
d2.resolve();
}, 1000);
Fiddle: http://jsfiddle.net/pVVad/
Изменение порядка определения отложенных объектов возможно, но это сделает этот пример намного сложнее.