Deferred JQuery - синхронизация асинхронного кода в JS - пример для нескольких объектов (два и более)
Primary tabs
$.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() { // когда оба объекта выполнены // здесь то, что выполнится по их завершении })
- Log in to post comments
- 4807 reads