Deferred JQuery - синхронизация асинхронного кода в JS - пример для нескольких объектов (два и более)

$.Deferred, в частности, позволяет синхронизировать операции, которые выполняются (точнее -заканчиваются) "не понятно когда".

Пример:

	// запуск задач через 3 секунды
	function test() {
	  var d = $.Deferred();
	  setTimeout(function() { d.resolve(); }, 3000);
	  return d.promise(); // вернёт объект $.Deferred
	}
	
	// test() - возврщает $.Deferred - а потому для него можно вызвать done() 
	var t = test().done(function() { alert("время истекло"); });

	// пытаемся добавить задачу уже после выполнения
	setTimeout(function() {
	  alert("добавляем задачу поздно");
	  t.done(function() { alert("выполнено"); }); // опять синхронизация
	}, 5000);

См. описание: habrahabr.ru/post/113073/

А если требуется синхронизировать 2 объекта:

var request = $.ajax(); // запрос по сети (возвращает $.Deferred)
var a = $('.test').animate(); // анимация (тоже возвращает тип $.Deferred)

// специальный объект $.when дли синхронизации нескольких $.Deferred
$.when(request, a).done(function() { // когда оба объекта выполнены 
	// здесь то, что выполнится по их завершении
})

Key Words for FKN + antitotal forum (CS VSU):