when example ejemplo create jquery jquery-deferred

example - jQuery Deferred vs jqXHR



jquery promise (2)

Aplazado está destinado a reemplazar jqXHR y abstrae la idea de éxito y error más allá de ajax.

Un rápido vistazo al código fuente: jQuery 1.6.1

// completeDeferred is resolved in only one place. completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] ); deferred.promise( jqXHR ); // this attaches the promise methods to jqXHR jqXHR.success = jqXHR.done; jqXHR.error = jqXHR.fail; jqXHR.complete = completeDeferred.done;

Hice una presentación de diapositivas de queso para trabajar sobre lo útil que es el diferido.

Yo suelo:

var jqXHR = $.ajax(settings); jqXHR.success(function(result){}); jqXHR.error(function(result){}); jqXHR.complete(function(result){});

Pero la versión 1.5 ha añadido el objeto diferido.

P: En general, ¿cuándo utiliza el éxito, el error y los métodos completos en comparación con el nuevo grado de éxito diferido, hecho y fracaso?


Para $.ajax() y family .success es simplemente un sinónimo de Deferred''s .done , y de la misma manera .error es un sinónimo de .fail .

Así que, de hecho, los ejemplos que muestra ya son métodos diferidos, pero con nombres diferentes.

.complete es en su mayoría un sinónimo para el nuevo jQuery 1.6 .always , y puede obtener el mismo efecto usando $.then(cb, cb) , lo que hará que se invoque a cb ya sea que la llamada AJAX tenga éxito o no. Creo que hay pequeñas diferencias en cuanto a los parámetros que se pasan a las devoluciones de llamada "fallidas" entre .complete , .always y $.then variantes.

Personalmente prefiero usar la versión diferida de esas funciones nombradas, porque entonces no necesita preocuparse por si sus objetos diferidos son jqXHRs o no. Solo los jqXHRs tienen .success , .error y .complete , pero todos los aplazados (incluidos los jqXHR) tienen .done , .fail y .always .

EDITAR Parece que los desarrolladores de jQuery están de acuerdo conmigo: han announced que .success , .error y .complete quedarán obsoletos en jQuery 1.8