¿Cuál es la diferencia entre un objeto diferido y su propio objeto de promesa?
Creemos un objeto diferido simple:
defer = $.Deferred( function ( defer ) {
setTimeout( defer.resolve, 3000 );
});
El objeto diferido anterior estará en el estado "pendiente" durante 3 segundos y luego cambiará al estado "resuelto" (en ese momento se invocarán todas las devoluciones de llamada vinculadas a él).
Recuperemos también la promesa de ese objeto diferido:
promise = defer.promise();
Ahora, para agregar devoluciones de llamada que se invocarán una vez que se resuelva el objeto diferido, podemos usar.done()
o.then()
. Sin embargo, podemos invocar este métodoambo en el propio objeto diferido o en su propio objeto de promesa.
defer.then( handler );
promise.then( handler );
En ambos casos, lahandler
e invocará la función @ (después de 3 segundos en este caso).
Si usamos$.when
, podemos pasar nuevamente el objeto diferido en sí mismo o su objeto de promesa:
$.when( defer ).then( handler );
$.when( promise ).then( handler );
De nuevo, no hay diferencia entre las dos líneas de código anteriores.
Demo en vivo http: //jsfiddle.net/G6Ad6
Entonces, mi pregunta es ya que podemos invocar a.then()
, .done()
, etc. en el objeto Deferre, d en sí y dado que podemos pasar ese objeto diferido a$.when()
, Cuál es el punto de.promise()
y recuperar el objeto prometido? ¿Cuál es el propósito del objeto de promesa? ¿Por qué hay esta redundancia en la funcionalidad?