Maison > interface Web > js tutoriel > Comment puis-je gérer correctement les tableaux de différés avec $.when() de jQuery ?

Comment puis-je gérer correctement les tableaux de différés avec $.when() de jQuery ?

Mary-Kate Olsen
Libérer: 2024-12-10 20:54:16
original
937 Les gens l'ont consulté

How Can I Correctly Handle Arrays of Deferreds with jQuery's $.when()?

Gestion des tableaux de promesses différées dans $.when()

Lorsque vous travaillez avec des tableaux de promesses différées, il est important de savoir comment les gérer en les passant dans $.when(). Dans cet article, nous aborderons un problème où un tableau de Deferreds n'est pas géré correctement par $.when() et fournirons une solution.

Le problème

Considérez le code suivant :

function getSomeDeferredStuff() {
  var deferreds = [];

  for (i = 1; i <= 10; i++) {
    var count = i;

    deferreds.push(
      $.post('/echo/html/', {
        html: '<p>Task #' + count + ' complete.',
        delay: count
      }).success(function(data) {
        $("div").append(data);
      }));
  }

  return deferreds;
}

$(function() {
  $("a").click(function() {
    var deferreds = getSomeDeferredStuff();

    $.when(deferreds).done(function() {
      $("div").append('<p>All done!</p>');
    });
  });
});
Copier après la connexion

Dans cet exemple, "Tout est terminé !" devrait apparaître une fois que toutes les tâches différées sont terminées. Cependant, $.when() ne reconnaît pas le tableau des Deferreds comme une seule entité, ce qui entraîne le message « Tout est terminé ! » être affiché prématurément.

La solution

Pour transmettre un tableau de Deferreds à $.when(), utilisez Function.prototype.apply :

$.when.apply($, my_array).then( ___ );
Copier après la connexion

Cette fonction prend un tableau de paramètres et les applique à une fonction. Par exemple :

$.when.apply($, deferreds).then(function() {
  $("div").append('<p>All done!</p>');
});
Copier après la connexion

Alternativement, dans ES6, vous pouvez utiliser l'opérateur spread :

$.when(...my_array).then( ___ );
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal