Rolf B: Wie auf Ende einer Javascript-Funktion warten?

Beitrag lesen

Hallo Steffen,

ja, wie gesagt: Du musst auf das Ende des send warten. D.h. du musst Dich beim XMLHttpRequest Objekt (nehmen wir mal an, es steht in der Variablen xhr) auf readystatechange registrieren und bei xhr.readyState === XMLHttpRequest.DONE und xhr.status === 200 ist der Upload des Chunks fertig.

Das kannst Du manuell in ein Promise verpacken - oder Du verwendest statt XMLHttpRequest gleich das fetch API, das liefert die Promises fertig an.

Da Du die Slices wohl nur deshalb bildest, um dem Server keine zu großen Brocken auf einmal anzuliefern, solltest Du immer erst dann einen neuen Send starten, wenn der alte durch ist. Eine Parallelisierung der Requests bringt eigentlich nichts, denn der limitierende Faktor für das Upload-Tempo dürfte die Bandbreite des Clients sein und das verbesserst Du nicht, indem Du die Bandbreite auf zwei Transfers aufteilst.

Bei einer Parallelisierung, d.h. zwei oder mehr Requests gleichzeitig, kommt erschwerend hinzu, dass Dir niemand die Reihenfolge garantiert, in der der Server zwei gleichzeitig vorliegende Requests abarbeitet. Da Du sie nacheinander schickst, ist die Wahrscheinlichkeit extrem hoch, dass sie in dieser Reihenfolge ankommen und auch in dieser Reihenfolge verarbeitet werden. Es ist jedoch nicht garantiert.

Mit etwas Programmiergeschick kannst Du aber in der Zeit, wo Du auf die Fertigstellung des vorigen POSTs wartest, den nächsten Slice vorbereiten.

Rolf

--
sumpsi - posui - obstruxi