Позвольте создать простой объект "Отложенный" :
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()
и извлечь обещать объект? Какова цель предмета обещания? Почему существует избыточность функциональности?