Heim >Web-Frontend >js-Tutorial >Wie kann ich Arrays von Deferreds mit $.when() von jQuery korrekt verarbeiten?

Wie kann ich Arrays von Deferreds mit $.when() von jQuery korrekt verarbeiten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-10 20:54:16857Durchsuche

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

Umgang mit Arrays von Deferreds in $.when()

Beim Arbeiten mit Arrays von Deferred Promises ist es wichtig zu wissen, wie man damit umgeht wenn sie an $.when() übergeben werden. In diesem Artikel werden wir uns mit einem Problem befassen, bei dem ein Array von Deferreds von $.when() nicht korrekt verarbeitet wird, und eine Lösung anbieten.

Das Problem

Betrachten Sie den folgenden Code:

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>');
    });
  });
});

In diesem Beispiel lautet „Alles erledigt!“ sollte erscheinen, nachdem alle zurückgestellten Aufgaben abgeschlossen sind. Allerdings erkennt $.when() das Array von Deferreds nicht als einzelne Entität, was zu „Alles erledigt!“ führt. wird vorzeitig angezeigt.

Die Lösung

Um ein Array von Deferreds an $.when() zu übergeben, verwenden Sie Function.prototype.apply:

$.when.apply($, my_array).then( ___ );

Diese Funktion nimmt ein Array von Parametern und wendet sie auf eine Funktion an. Zum Beispiel:

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

Alternativ können Sie in ES6 den Spread-Operator verwenden:

$.when(...my_array).then( ___ );

Das obige ist der detaillierte Inhalt vonWie kann ich Arrays von Deferreds mit $.when() von jQuery korrekt verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn