Выполнение deferred

.resolve()  .reject()

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

.resolve([args]) .reject([args]):deferred1.5

Первый метод переводит объект deferred из состояния "не выполнено" в "успешно выполнено", а второй, в состояние "ошибка выполнения". Под args подразумеваются не один, о а произвольное число параметров. Все они будут переданы в обработчики смены состояния (в том же порядке).

Замечание 1: если вы имеете дело не с самим объектом deferred, а с его заместителем, то вы не сможете воспользоваться методами resolve и reject.

Замечание 2: объект deferred может изменить свое состояние только один раз. Вызов методов resolve и reject на объектах, состояние которых отлично от "не выполнено" ни к чему не приведет.

Когда объект deferred переходит в состоянии resolved, происходит вызов всех обработчиков, установленных с помощью done(), then() и always(). Если объект переводят в состояние rejected, то произойдет выполнение всех обработчиков, установленных методами fail(), then() и always().

Пример

Создадим два объекта deferred, добавим к ним обработчики успешного выполнения и сразу же переведем объекты в это состояние:

// создадим deferred-объект и установим на него обработчик 
// успешного выполнения не ожидающий передачи параметров
var deferred1 = $.Deferred()
  .done(function(){
    alert("Объект deferred1 перешел в состояние успешного выполнения.");
  });
 
// создадим другой deferred-объект, на который установим обработчик 
// успешного выполнения ожидающий передачи двух параметров
var deferred2 = $.Deferred()
  .done(function(arg1, arg2){
    alert("Объект deferred2 перешел в состояние успешного выполнения. "
         +"Переданные параметры: "+arg1+" и "+arg2);
  });
 
// изменим состояния объектов, что вызовет выполнение обработчиков
deferred1.resolve(); // первый без задания параметров
deferred2.resolve(1, "a"); // второй получит два параметра

В результате выполнения этого кода, будут вызваны оба обработчика (первый без параметров и второй с двумя параметрами).

Ссылки

Поисковые ключи:
  • выполнение deferred
  • deferred удачно выполнен
  • resolve
  • .resolve
  • deferred.resolve
Поисковые ключи:
  • ошибка выполнения deferred
  • deferred выполнен с ошибкой
  • reject
  • .reject
  • deferred.reject