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