Comment peut-jQuery différés être utilisé?

jQuery 1.5 apporte le nouveau Différé d'objet et le joint méthodes .quand, .Différés et ._Deferred.

Pour ceux qui n'ont pas utilisé .Deferred avant, j'ai annoté le source.

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 le API et 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'un tampon de classe 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 .Deferred et .when.

Il serait également agréable de voir des exemples de ._Deferred.

Reliant à la nouvelle jQuery.ajax source des exemples est de la triche.

Je suis particulièrement intéressé par quelles techniques sont disponibles lorsque nous abstraire de savoir si une opération est en mode synchrone ou asynchrone fait.

  • À partir de la FAQ: éviter poser des questions subjectives où...chaque réponse est tout aussi valable: “Quelle est votre préférée ______?” (leur accent)
  • Je vais regarder la remanier.
  • C'est une bonne question, mais il ne peut pas être beaucoup de gens qui peuvent répondre 🙂
  • J'ai surtout en regardant ceux qui l'a utilisé quand il était un 3e partie plugin. Et encourager les gens à s'asseoir et utiliser!
  • ._Deferred est tout simplement le vrai Différée "objet" qui .Deferred utilise. C'est un objet interne qui vous aurez plus de chances de ne jamais avoir besoin.
  • Je sais qu'. Il est utilisé en interne, mais il est rendu accessible au public. Ce qui signifie que les gens peuvent l'utiliser, la seule différence est la possibilité de l'annuler, je ne sais pas ce intelligent de choses que nous pouvons faire avec ce supplément annuler la fonction. Le fait que vous pouvez annuler est utile. La seule référence que j'ai vu est la cartographie de n différée objets dans un différé d'objet et à l'annulation de tous lorsque l'on déclenche.
  • isResolved est et/ou sera obsolète dans un avenir proche.
  • Comment cela est-il utilisé? pourriez-vous mettre un exemple pour montrer comment l'appeler?
  • J'ai trouvé cela très utile jqfundamentals.com/chapter/ajax-deferreds

InformationsquelleAutor Raynos | 2011-02-02