Позвольте создать простой объект "Отложенный" :
defer = $.Deferred( function ( defer ) {
setTimeout( defer.resolve, 3000 );
});
Вышеуказанный объект "Отложен" будет находиться в состоянии "ожидающего рассмотрения" в течение 3 секунд, а затем переключиться в "разрешенное" состояние (после чего будут вызваны все связанные с ним вызовы).
Позвольте также получить обещание этого объекта Отложенное:
promise = defer.promise();
Теперь, чтобы добавить обратные вызовы, которые будут вызываться после удаления объекта Отложенные, мы можем использовать .done() или .then(). Однако мы можем вызвать этот метод как для самого объекта Отложенного объекта или его собственного объекта обещания.
defer.then( handler );
или
promise.then( handler );
В обоих случаях функция handler будет вызываться (через 3 секунды в этом случае).
Если мы используем $.when, мы можем снова передать объект "Отложенный" или его объект-обещание:
$.when( defer ).then( handler );
или
$.when( promise ).then( handler );
Опять же, нет разницы между двумя вышеуказанными строками кода.
Живая демонстрация: http://jsfiddle.net/G6Ad6/
Итак, мой вопрос заключается в том, что мы можем вызывать .then(), .done() и т.д. в самом объекте "Отложенный" , и поскольку мы можем передать этот объект "Отложен" в $.when(), что точка .promise() и извлечь обещать объект? Какова цель предмета обещания? Почему существует избыточность функциональности?