Обработка выполнения deferred
С помощью этих методов можно установить обработчики перехода объекта deferred в состояние удачного выполнения, ошибки выполнения (resolved или rejected). Замечание: представленные методы, относятся к методам объекта deferred, а не jQuery. Поэтому на объектах jQuery их вызывать не следует (например так: $("div").reject(...)).
Первый метод устанавливает заданную функцию handler в качестве обработчика перехода объекта deferred, в состояние удачного выполнения. Второй метод позволяет обрабатывать переход объекта deferred в состояние ошибки выполнения. С помощью последнего метода можно установить обработчики на оба случая. Во всех трех методах handler'ы могут быть заданы как отдельными функциями, так и массивами функций.
Устанавливает один (общий) обработчик, реагирующий на переход в любое из двух состояний.
Начиная с jQuery-1.7, в методе then() можно задать третий параметр — обработчик события progress. Это событие происходит при вызове методов notify() и notifyWith() на объекте deferred.
Пока объект deferred находится в состоянии "не выполнено", на нем может происходить события частичного выполнение (прогресса выполнения), установить обработчики на это событие можно с помощью метода progress().
Содержание |
Примеры использования
Пример 1
Создадим объект deferred (который будет хранить состояние выполнения интересующей нас задачи) и установим на него обработчики выполнения этого объекта (и соответственно наблюдаемой задачи):
var deffr = $.Deferred(); deffr.done(function(){ alert("Объект deferred принял состояние resolved." +"Это значит, что задача была выполнена успешно."); }); deffr.fail(function(){ alert("Объект deferred принял состояние rejected." +"Это значит, что задача была выполнена с ошибкой."); }); deffr.then(function(){ alert("Объект deferred принял состояние resolved."); },function(){ alert("Объект deferred принял состояние rejected."); }); deffr.always(function(){ alert("Объект deferred принял состояние rejected или resolved."); });
Пример 2
В обработчики смены состояния deffered могут быть переданы парамеры:
var deff = $.Deferred(); // установим на deff обработчик удачного выполнения, // который будет ожидать два параметра deff.done(function(a, b){ alert("Переданные параметры: a = " + a +" и b = " + b); }); //... какой то код ... deff.resolve(1, 2); // Переданные параметры: a = 1 и b = 2