AngularJS $ q. Zurückgestellte Warteschlange

Ich habe ein Array (z. B. es ist eine Warteschlange von Dateien):

[{deferred: fileDef, data: file}, {...}, ...]

JederfileDef undDatei send to upload Funktion welche zurückkehrtfileDef.promise und Ruf anfileDef.resolve oderfileDef.reject nach dem Hochladen.

Ich möchte die Dateien in der angegebenen Reihenfolge hochladen. Die nächste Datei wird hochgeladen, nachdem die vorherige Datei geladen wurde.

Jetzt benutze ich

var queue = [];
var uploading = false;

//file input callback call each time the user selects files
function addAndUpload (file) {

  queue.push({deferred: $q.defer(), data: file});

  if (!uploading) recurceQueue();

  function recurceQueue () {
    if (queue.length) {
      uploading = true;
      var fileObj = queue.shift();
      upload(fileObj.deferred, fileObj.data);

      fileObj.deferred.promise.finally(function () {
        uploading = false;
        recurceQueue();
      })
    }
  }
}

Aber es scheint schlimm. Wie schreibe ich besser?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage