Параметризованное выполнение deferred

Материал из JQuery

Перейти к: навигация, поиск
.resolveWith()  .rejectWith()

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

.resolveWith(context,[args]) .rejectWith(context,[args]):deferred1.5

Первый метод переводит объект deferred из состояния "не выполнено" в "успешно выполнено", а второй, в состояние "ошибка выполнения".

context — задает значение переменной this в функциях, заданных в роли обработчиков смены состояния объекта deferred.
args — массив параметров, которые будут переданы в соответствующие обработчики. В обработчиках, каждый элемент этого массива будет доступен как отдельный параметр (т.е. args[0] будет первым параметром в обработчике, args[1] — вторым параметром и т.д.).

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

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

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

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

Выполним объект Deffered, задав в качестве контекста выполнения определенный элемент страницы, и два аргумента:

// создадим объект Deferred.
var deff = $.Deferred();
// установим на него обработчик удачного выполнения,
// который будет ожидать два параметра
deff.done(function(a, b){
  alert("Контекст выполнения этой функции, элемент с id = " + this.attr("id")
  + ", а переданные в нее параметры: a = " + a +" и b = " + b);
});
 
//... какой то код ... 
 
deff.resolveWith($("#someEl"), [1, 2]);
 
// в итоге, на экран будет выведено сообщение:
// Контекст выполнения этой функции, элемент с id = someEl, 
// а переданные в нее параметры: a = 1 и b = 2

Ссылки

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