Выполнение deferred
С помощью этих двух методов можно изменить состояние объекта deferred на resolved или rejected ("удачно выполненное" или "ошибки выполнения"). Замечание: представленные методы, относятся к методам объекта deferred, а не jQuery. Поэтому на объектах jQuery их вызывать не следует (например так: $("div").reject(...)).
Первый метод переводит объект 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"); // второй получит два параметра
В результате выполнения этого кода, будут вызваны оба обработчика (первый без параметров и второй с двумя параметрами).