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!