Antwort an „Felix Riesterer“ verfassen

Liebe Mitlesende,

ich habe für mein Projekt einen Uploader gebaut, der im Prinzip das umsetzt, was mein Artikel zu segmentierten Uploads beschreibt. Damit die Segmente in der richtigen Reihenfolge hochgeladen werden können, verwende ich eine Funktion, die sich immer wieder selbst aufruft, wenn ein weiteres Segment übertragen werden muss:

const
  chunkSize = 2*1000*1000, // 2MB
  chunks = chunks = Math.ceil(myFile.size / chunkSize);

let chunk = 0;

const uploader = () => {
  ... // formData befüllen
  fetch(
    myURL,
    { method: "POST", body: formData }
  )
  .then(response => response.json())
  .then(data => {
    if ("error" in data) {
      handleError(data.error);
    } else {
      chunk++;
      if (chunk < chunks) {
        uploader();
      }
    }
  })
  .catch(error => {
    //
  });
};

uploader();

Jetzt habe ich das Problem, dass ich eine Liste an Dateien übertragen möchte. Mein erster Versuch war der, die Liste in einer Schleife abzuarbeiten. Das Ergebnis ist, dass die uploader()-Aufrufe nicht in der richtigen Reihenfolge angestoßen werden. Bei Dateien, die in nur einem Segment übertragen werden können, stört das nicht, aber bei Dateien, die in mehreren Segmenten übertragen werden, stört das sehr wohl, weil das Backend für jeden User nur eine temporäre Datei anbietet, in der die Segmente gesammelt werden.

Frage: Wie kann ich es erreichen, dass eine Datei erst übertragen wird, wenn eine andere definitiv (also auch mit egal wievielen Segmenten) komplett übertragen worden ist? Muss ich mir da ein Event bauen, das mein Uploader sendet, wenn er fertig ist, damit ein passender EventHandler dann die nächste Datei abarbeitet? Oder gibt es da eine Lösung mit Promises?

Was würdet ihr empfehlen?

Liebe Grüße

Felix Riesterer

akzeptierte Antworten

freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen