AngularJS $ q. Cola diferida

Tengo una matriz (por ejemplo, es una cola de archivos):

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

CadafileDef yexpediente Enviar a la función de carga que devolverfileDef.promise y llamafileDef.resolve ofileDef.reject despues de subir

Quiero cargar los archivos en orden: siguiente archivo después de que se haya cargado el archivo anterior.

Ahora uso

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

Pero parece malo. ¿Cómo escribir mejor?

Respuestas a la pregunta(1)

Su respuesta a la pregunta