В чем разница между отложенным объектом и его собственным объектом обещания?

Давайте создадим простой отложенный объект:

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

28
задан Šime Vidas 10 November 2011 в 00:14
поделиться