2016-01-19 5 views
1

Действительно борется с этим в данный момент, поэтому, если бы у кого-нибудь были какие-то советы, которые были бы фантастическими. Довольно уверен, что это случай, когда я усложняю что-то простое, но мы увидим!Угловая загрузка файла Обратный звонок

Используя следующую для загрузки файлов на сервер

https://github.com/nervgh/angular-file-upload/wiki/Module-API

Я создаю несколько экземпляров файла пользователя для определенных типов файлов (не могу просто использовать один, как мне нужно разные URL-адрес для загрузки по каждый)

Так я тогда есть список, как

var uploaders = [a list of file object uploaders] 

то, что я хочу сделать, это итерация по списку, вызовите uploadAll() на каждом, после того как файлы для каждого из них были загружены, продолжите сценарий.

Проблема: я не думаю, что функция uploadAll реализует promise, поэтому, когда я пытаюсь выполнить следующий код, остальная часть скрипта продолжается до того, как файлы будут успешно загружены.

Вот что у меня есть

var deferred = $q.defer(); 

var uploaders = [my list of object uploaders] 

var allUploads = uploaders.map(function(uploaders) { 
    var singleUploadPromise = uploaders.uploadAll(); 
    return singleUploadPromise; 
}); 



$q.all(allUploads).then(function() {  
    console.log('Finished uploading all files') 
    deferred.resolve('Finished uploading all files'); 
}, function(error) { 
    deferred.reject(error); 
}); 

return deferred.promise; 

Файлы получить загружены, но остальная часть сценария выполняет, прежде чем они делают. Когда я

console.log(allUploads) 

Я получаю список undefined элементов. Поэтому я явно ошибаюсь, но я не уверен, как двигаться вперед.

+0

Я не лучший в ES6, но я не думаю, что uploadAll() возвращает ничего https://github.com/nervgh/angular-file-upload/blob/master/src/services/ FileUploader.js # L134 – ChrisY

ответ

0

Это метод uploadAll(), который вызывает вашу проблему, я думаю.

1

Основываясь на просмотре кода для загрузчика файлов, .uploadAll() ничего не возвращает, но имеет обратный вызов .onCompleteAll(). Таким образом, вы можете создать дефферируемый объект, который вы разрешаете в функции обратного вызова каждого вызова загрузчика для uploadAll().

 var uploaders = [my list of object uploaders]; 

     var allUploads = uploaders.map(function(uploader) { 
      // you need one deffered object per uploader 
      var deferred = $q.defer(); 

      // set up an onCompleteAll callback for each uploader 
      uploader.onCompleteAll = function() { 
       deferred.resolve('onCompleteAll'); 
      }; 

      // call uploadAll on each uploader 
      uploader.uploadAll(); 

      return deferred; 
    }); 


    var combinedUploads = $q.all(allUploads).then(function() {  
      console.log('Finished uploading all files'); 
    }, function(error) { 
      console.log('error!'); 
    }); 

    return combinedUploads.promise; // assuming this was in another function 
+0

Спасибо за сообщение, наверняка похоже на возможное решение. Позволю тебе знать, как я уйду, когда у меня появится шанс! – user2085143

+0

Отлично! Мне очень любопытно узнать, было ли это то, что вам нужно. Я могу поработать с ним еще, если это не сработает. –

Смежные вопросы