jQuery 1.5 apporte le nouveau Différé d'objet et le joint méthodes d' .when
, .Deferred
et ._Deferred
.
Pour ceux qui havn pas utilisé .Deferred
avant, j'ai annoté de la source pour elle
Quelles sont les utilisations possibles de ces nouvelles méthodes, comment pouvons-nous aller sur la côté d'eux dans les modèles?
J'ai déjà lu l' API et de la source, donc je sais ce qu'il fait. Ma question est comment pouvons-nous utiliser ces nouvelles fonctionnalités dans le quotidien de code?
J'ai un simple exemple d'une classe de mémoire tampon qui appelle à une requête AJAX dans l'ordre. (Prochain démarrage après le précédent se termine).
/* 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();
};
};
Je suis à la recherche pour les démonstrations et les utilisations possibles de l' .Deferred
et .when
.
Il serait également agréable de voir des exemples de ._Deferred
.
La liaison à la nouvelle - jQuery.ajax
source des exemples est de la triche.
Bounty: nous Montrer quelles techniques sont disponibles lorsque nous abstraire de savoir si une opération est en mode synchrone ou asynchrone fait.