¿Cuál es la diferencia entre un object diferido y su propio object prometido?

Vamos a crear un simple object diferido:

defer = $.Defernetworking( function ( defer ) { setTimeout( defer.resolve, 3000 ); }); 

El object diferido anterior estará en el estado "pendiente" durante 3 segundos, y luego cambiará al estado "resuelto" (en ese punto se invocarán todas las devoluciones de llamada vinculadas a él).

Recuperemos también la promise de ese object diferido:

 promise = defer.promise(); 

Ahora, para agregar devoluciones de llamadas que se invocarán una vez que se resuelva el object .done() , podemos usar .done() o .then() . Sin embargo, podemos invocar este método tanto en el object Diferido como en su propio object promise.

 defer.then( handler ); 

o

 promise.then( handler ); 

En ambos casos, se invocará la function del handler (después de 3 segundos en este caso).

Si usamos $.when , podemos volver a pasar el object diferido en sí o su object de promise:

 $.when( defer ).then( handler ); 

o

 $.when( promise ).then( handler ); 

Nuevamente, no hay diferencia entre las dos líneas de código anteriores.

Demostración en vivo: http://jsfiddle.net/G6Ad6/

Entonces, mi pregunta es porque podemos invocar .then() , .done() , etc. en el object Diferido mismo y dado que podemos pasar ese object Diferido a $.when() , ¿cuál es el punto de .promise() y recuperar el object prometido? ¿Cuál es el propósito del object prometido? ¿Por qué hay esta networkingundancia en la funcionalidad?

3 Solutions collect form web for “¿Cuál es la diferencia entre un object diferido y su propio object prometido?”

Crea una copy "sellada" del valor diferido, sin los .resolve() y .reject() . De la documentation :

El método defernetworking.promise() permite que una function asincrónica evite que otros códigos interfieran con el progreso o el estado de su request interna.

Se usa cuando no tiene sentido que se modifique el valor. Por ejemplo, cuando jQuery realiza una request de AJAX, devuelve un object de promise. Internamente, .resolve() un valor para el object Defernetworking original, que el usuario observa con la promise.

Cuando se utiliza la "promise" de un object diferido, los observadores (objects que esperan resolver por ejemplo) no tienen acceso directo al object diferido en sí, por lo que no pueden llamar, por ejemplo, el método "Resolver" de ese aplazado. Es una forma de proteger el diferido original.

Con Defernetworking, puede controlar su set estados.

Cuando se trata de Protable, puede leer el estado y quizás adjuntar la callback. get

  • Cómo seleccionar una image que tenga un atributo 'alt' particular usando jquery
  • Error al cargar el recurso: el server respondió con un estado de 500 (Error interno del server) en la function Enlazar
  • search elementos con position: atributo
  • Disparo de jQuery live ('clic') para hacer clic con el button derecho
  • window.open no funciona en IE
  • JQuery Eliminar Seleccionar opción de la list
  • Eliminar la function de hacer clic, pero mantener el vuelo estacionario intacto
  • agregar parámetro a los enlaces en la página usando jquery
  • ¿A qué evento jQuery se llama justo después de $ (document) .ready ()?
  • jquery Opción de configuration seleccionada con valor conocido
  • Crear hojas de estilo nuevas (no cambiar) usando jQuery
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.