2016-01-19 95 views
1

真的在這一刻苦苦掙扎,所以如果任何人有任何意見,這將是太棒了。很確定,這是一個讓我簡單複雜化的例子,但我們會看到!角度文件上傳回調

使用下面的文件上傳到服務器

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

我創造了某些類型的文件(不能只用一個,因爲我需要不同的上傳URL的文件上傳的多個實例每個)

所以我當時有一個像

var uploaders = [a list of file object uploaders] 

我想要做的就是遍歷列表的列表,請撥打每個文件上都有,然後一旦每個文件都上傳完畢,繼續執行腳本。

問題是,我不認爲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

太棒了!我很想知道這是否是你需要的。如果這不起作用,我可以再補充一點。 –