jQuery 1.5 trae el nuevo objeto diferido y los métodos adjuntos .when
, .Deferred
y ._Deferred
.
Para aquellos que no han usado .Deferred
antes, he anotado la fuente para ello .
¿Cuáles son los posibles usos de estos nuevos métodos, cómo hacemos para adaptarlos a los patrones?
Ya he leído la API y la fuente , así que sé lo que hace. Mi pregunta es ¿cómo podemos usar estas nuevas funciones en el código cotidiano?
Tengo un ejemplo simple de una clase de búfer que llama a la solicitud AJAX en orden. (El siguiente comienza después del anterior).
/* Class: Buffer
* methods: append
*
* Constructor: takes a function which will be the task handler to be called
*
* .append appends a task to the buffer. Buffer will only call a task when the
* previous task has finished
*/
var Buffer = function(handler) {
var tasks = [];
// empty resolved deferred object
var deferred = $.when();
// handle the next object
function handleNextTask() {
// if the current deferred task has resolved and there are more tasks
if (deferred.isResolved() && tasks.length > 0) {
// grab a task
var task = tasks.shift();
// set the deferred to be deferred returned from the handler
deferred = handler(task);
// if its not a deferred object then set it to be an empty deferred object
if (!(deferred && deferred.promise)) {
deferred = $.when();
}
// if we have tasks left then handle the next one when the current one
// is done.
if (tasks.length > 0) {
deferred.done(handleNextTask);
}
}
}
// appends a task.
this.append = function(task) {
// add to the array
tasks.push(task);
// handle the next task
handleNextTask();
};
};
Estoy buscando demostraciones y posibles usos de .Deferred
y .when
.
También sería encantador ver ejemplos de ._Deferred
.
Vinculación a lo nuevo jQuery.ajax
fuente de ejemplos es hacer trampa.
Estoy particularmente interesado en las técnicas disponibles cuando abstraemos si una operación se realiza de forma sincrónica o asincrónica.
._Deferred
es simplemente el verdadero "objeto diferido" que .Deferred
utiliza. Es un objeto interno que probablemente nunca necesitarás.