Обработка выполнения deferred

.done()  .fail()  .then()  .always()

С помощью этих методов можно установить обработчики перехода объекта deferred в состояние удачного выполнения, ошибки выполнения (resolved или rejected). Замечание: представленные методы, относятся к методам объекта deferred, а не jQuery. Поэтому на объектах jQuery их вызывать не следует (например так: $("div").reject(...)).

.done(handler) .fail(handler) .then(doneHandler,failHandler):deferred1.5

Первый метод устанавливает заданную функцию handler в качестве обработчика перехода объекта deferred, в состояние удачного выполнения. Второй метод позволяет обрабатывать переход объекта deferred в состояние ошибки выполнения. С помощью последнего метода можно установить обработчики на оба случая. Во всех трех методах handler'ы могут быть заданы как отдельными функциями, так и массивами функций.

.always(handler):deferred1.6

Устанавливает один (общий) обработчик, реагирующий на переход в любое из двух состояний.

.then(doneHandler,failHandler,progressHandler):deferred1.7

Начиная с 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

Ссылки

Поисковые ключи:
  • выполнение deferred
  • deferred удачно выполнен
  • resolved
  • done
  • .done
  • deferred.done
Поисковые ключи:
  • ошибка выполнения deferred
  • deferred выполнен с ошибкой
  • rejected
  • fail
  • .fail
  • deferred.fail
Поисковые ключи:
  • then
  • .then
  • deferred.then
Поисковые ключи:
  • always
  • .always
  • deferred.always