Афоризм
А в холодильнике ночами
еда полезней и вкусней.
Последние статьи

 • Активности Android
Многоэкранные Android приложения
 • Fragment dynamic
Динамическая загрузка фрагментов в Android
 • Fragment lifecycle
Жизненный цикл Fragment'ов в Android
 • Fragment example
Пример Fragment'ов в Android
 • Data Binding
Описание и пример Data Binding
 • Пример MVVM
Пример использования MVVM в Android
 • Компонент TreeTable
Описание компонента TreeTable для Swing
 • Пример TreeTable
Пример использования TreeTable
 • Хранилища Android
Внутренние и внешние хранилища данных
 • Пример SQLite
Пример использования SQLite в Android
 • WebSocket
Описание и пример реализации WebSocket
 • Визуальные компоненты
Улучшен компонент выбора даты из календаря
 • Анимация jQuery
Описание и примеры анимации элементов DOM
 • APK-файл Android
Создание apk-файла для android устройств, .dex файлы
 • платформа JaBricks
Платформа OSGi-приложения JaBricks
Поддержка проекта

Если Вам сайт понравился и помог, то будем признательны за Ваш «посильный» вклад в его поддержку и развитие
 • Yandex.Деньги
  410013796724260

 • Webmoney
  R335386147728
  Z369087728698
Перейти к содержанию jQuery

Объект jQuery.Deferred

В jQuery версии 1.5 добавлен специальный объект jQuery.Deferred, который хранит состояние выполнения задачи. Объект может иметь один из следующих типов состояний : "еще не выполнено" (pending), "выполнено" (resolved), "ошибка при выполнении" (rejected). Кроме этого объект $.Deferred имеет методы для изменения состояния, а также методы для установки обработчиков, реагирующих на переход объекта из состояния "еще не выполнено" в другое состояние.

Метод выполнения асинхронных запросов ajax использует deferred-объекты, позволяющие назначать довольно простым способом несколько обработчиков на события завершения запроса (успешного или ошибкой), а также назначать обработчики завершения нескольких параллельных запросов.

Методы объекта $.Deferred

МетодыПримерыОписание

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

.done(handler)
.fail(handler)
.then(doneHandler,failHandler)
.always(handler).
регистрирация обработчиков объекта deferred при изменении состояния;
 • определение обработчика handler перехода объекта deferred в состояние удачного выполнения;
 • определение обработчика handler перехода объекта deferred в состояние ошибки выполнения;
 • определение обработчика перехода deferred в состояние resolved или rejected;
 • определение обработчика перехода объекта deferred в любое состояние.

.progress()

.progress(handler)
регистрирация обработчика прогресса выполнения объекта deferred;
 • определение обработчика объекта deferred качестве обработчика события progress. Данное событие возникает при вызове методов notify() и notifyWith() на объекте deferred.

.resolve()
.reject()

.resolve([args])
.reject([args])
методы изменения состояния объекта deferred на resolved или rejected;
 • перевод объекта deferred из состояния "не выполнено" в "успешно выполнено";
 • перевод объекта deferred из состояния "не выполнено" в "ошибка выполнения".

.notify()

.notify([args])
вызов события промежуточного выполнения deferred (прогресса выполнения progress);
 • вызов события этапа выполнения объекта deferred, сопровождающееся выполнением обработчиков, установленных на текущий объект, методами progress() и then().
.resolveWith()
.rejectWith()

.resolveWith(context,[args])
.rejectWith(context,[args])


методы изменения состояния объекта deferred на resolved или rejected;
 • метод переводит объект deferred из состояния "не выполнено" в "успешно выполнено";
 • метод переводит объект deferred из состояния "не выполнено" в "ошибка выполнения";
     context — определяет значение переменной this в функциях;
     args — массив параметров, передаваемые обработчикам.
.isResolved()
.isRejected()

.isResolved()
.isRejected()
методы проверки состояний : позволяют проверить, находится ли deferred-объект в состоянии resolved или rejected;
 • методы проверки состояний deferred-объект в состоянии resolved ("успешно выполнено");
 • методы проверки состояний deferred-объект в состоянии rejected ("ошибка выполнения").
.state() .state([doneFilter],[failFilter]) определение текущего состояния deffered-объекта в виде строки;
 • получение одного из трех возможных значений : ["pending", "resolved", "rejected"].
.pipe:promise
.pipe([doneFilter],[failFilter])

создание promise-объекта с фильтрацией параметров;
 • создание promise-объекта, состояние которого будет меняться вместе с исходным deffered-объектом;
    обработчики promise-объекта получают предварительно обработанные параметры с помощью doneFilter и failFilter;
    doneFilter — функция, предназначенная для удачного выполнения исходного deffered-объекта;
    failFilter — функция, предназначенная для неудачного выполнения исходного deffered-объекта.
.promise()
.promise([target]):promise
создание заместителя deferred-объекта, не имеющего методы изменения состояния;
 • создание заместителя deferred-объекта обладающего как первоначальными полями и методами, так и полями и методами заместителя.
.when()
.when(obj1,obj2,..)
создание группового deferred-объекта, контролирующего состояния нескольких deferred-объектов;
 • deferred-объект перейдет в состояние resolved, когда в это состояние перейдут все объекты (параметры), определенные в $.when();
 • deferred-объект перейдет в состояние rejected, когда в это состояние перейдет один из объектов (параметров), определенных в $.when().

Создание Deferred объекта

Для создания экземпляра Deferred можно воспользоваться функцией $.Deferred([function(obj)]), которая возвращает deferred-объект. В качестве аргумента можно использовать функцию, которая инициализирует объект. Внутри функции deferred-объект доступен в переменной this и в аргументе obj. Пример :


// создание объекта Deferred
let defd1 = $.Deferred();
 
// создание объекта Deferred с использованием обработчика
// успешного выполнения
let defd2 = $.Deferred (function(obj){
    obj.done(successCallback);
});
 

Примеры использования Deferred объекта

Пример обработчиков .done, .fail, .then, .always


var defd = $.Deferred()
.done(function(){
    console.log("Объект defd в состоянии resolved.");
})
.fail(function(){
    console.log("Объект defd в состоянии rejected.");
})
.then(function(){
    console.log("Объект defd в состоянии resolved.");
  },function(){
    console.log("Объект defd в состоянии rejected.");
})
.always(function(){
  console.log("Объект defd в состоянии rejected/resolved");
});
 

Пример вызова метода progress


let defd = $.Deferred();
 
// подключение обработчиков прогресса и
// завершения операции
defd.progress(function(p){
    console.log("Операция выполнена на " + p + "%");
}).done(function(){
    console.log("Операция завершена!");
});

defd.notify(25);
defd.notify(50);
defd.notify(75);
defd.resolve();
 
Сообщения в консоли

Операция выполнена на 25%
Операция выполнена на 50%
Операция выполнена на 75%
Операция завершена!
 

Пример вызова метода resolve


// deferred-объект с обработчиком успешного выполнения
let defd1 = $.Deferred().done(function(){
      console.log("defd1 в состоянии успешного выполнения");
});
 
// deferred-объект с обработчиком успешного выполнения,
// получающий два параметра
let defd2 = $.Deferred().done(function(arg1, arg2){
    console.log("defd2 в состоянии успешного выполнения; "
             + "параметры: " + arg1 + ", " + arg2);
  });
 
// изменим состояния объектов, сопровождающееся
// выполнением обработчиков
defd1.resolve();
defd2.resolve(10, "test");
Сообщения в консоли

defd1 в состоянии успешного выполнения
defd2 в состоянии успешного выполнения; параметры: 10, test

 

Пример события notify


let defd = $.Deferred();
 
// подключение обработчиков прогресса и
// завершения операции
defd.progress(function(p){
    console.log("Операция выполнена на " + p + "%");
}).done(function(){
    console.log("Операция завершена!");
});

defd.notify(25);
defd.notify(50);
defd.notify(75);
defd.resolve();
 
Сообщения в консоли

Операция выполнена на 25%
Операция выполнена на 50%
Операция выполнена на 75%
Операция завершена!
 

Пример вызова метода resolveWith


let defd = $.Deferred();

// подключение обработчика завершения операции
deff.done(function(a, b){
    console.log("Контекст выполнения функции :"
          + "элемент '" + this.attr("id") + "'"
          + ", входные параметры : a=" + a 
          + ", b=" + b);
});
 
deff.resolveWith($("#someElement"), [1, 2]);
 
Сообщения в консоли

Контекст выполнения функции, элемент 'someElement', \
входные параметры : a=1, b=2
 

Пример использования pipe

Ниже представлен пример использования deffered-объекта и его заместителя с фильтрацией pipe.


// deferred-объект
let defd = $.Deferred();
// заместитель deferred-объекта с фильтрацией
let fltr = defd.pipe(function(value){
                        return value * 2;
                    });
// перевод в состояние resolved
defd.resolve(5);
 
// выполнение заместителя deferred-объекта
fltr.done(function(value){
    console.log("параметр " + value + " (2*5 = 10)");
});
 
// обработчик deferred-объекта с неизмененным параметром
defd.done(function(value){
    console.log("параметр " + value + " ( 5 )");
});
Сообщения в консоли

параметр 10 (2*5 = 10)
параметр 5 ( 5 )
 

Пример использования promise


var obj  = {a:1, b:"text"};
var defd = $.Deferred();
var prms = defd.promise(obj);

// значения заместителя
console.log(prms.a + ", " + prms.b);

// deferred-объект в состояние resolved
defd.resolve(); 

// состояния deferred-объекта и его заместителя
console.log("defd.state = " + defd.state());
console.log("prms.state = " + prms.state());
 
Сообщения в консоли

1, text
defd.state = resolved
prms.state = resolved
 

Пример использования when


let defd1 = $.Deferred();
let defd2 = $.Deferred();
let defd  = $.when(defd1, defd2);
 
defd.done(function(){
    console.log("deferred-объекты в состоянии 'resolved'");
}).fail(function(){
    console.log("один из deferred-объектов 'rejected'");
});

defd1.resolve();
defd2.reject();
 
Сообщения в консоли

один из deferred-объектов 'rejected'
 
  Рейтинг@Mail.ru