AngularJS $ q. Fila adiada

Eu tenho matriz (por exemplo, fila de arquivos):

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

CadafileDef eArquivo enviar para fazer upload da função que retornafileDef.promise e liguefileDef.resolve oufileDef.reject após o upload.

Quero fazer o upload de arquivos em ordem: o próximo upload do arquivo depois que o arquivo anterior for carregado.

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

Mas parece ruim. Como escrever melhor?

questionAnswers(1)

yourAnswerToTheQuestion