2017-04-03 61 views
0

第一組文件上傳成功,但一旦完成,它就不會啓動隊列中的下一組。使用Promise.map排隊文件上傳

爲什麼迭代在第一組之後停止,我該如何解決這個問題?

該解決方案不一定要使用藍鳥 - 我首先使用它,因爲我認爲,我會變得更容易。

function uploadFile(url, file, onProgress) { 

    return new Promise((resolve, reject) => { 

     const formData = new FormData(); 
     formData.append('file', file); 

     const xhr = new XMLHttpRequest(); 

     xhr.open('POST', url); 

     xhr.addEventListener('readyState', _ => { 
      if (xhr.readyState === xhr.DONE) { 
       resolve(file); 
      } 
     }); 

     xhr.addEventListener('error', _ => { 
      reject(new Error()); 
     }); 

     xhr.upload.addEventListener('progress', event => { 
      onProgress && onProgress(event.loaded/event.total); 
     }); 

     xhr.send(formData); 

    }); 

} 

/* files is a FileList */ 
Promise.map(Array.from(files), file => { 
    return uploadFile(location.href, file, null); 
}, { concurrency: 2 }); 
+0

你想要上傳順序,還是並行? –

+0

我想並行上傳2個文件。 –

+1

我的第一個傾向將是檢查你的決心是否真的被調用。 – powerc9000

回答

0

事件類型被稱爲readystatechange(未readyState)。

由於powerc9000在註釋中發現,Promise未得到解決,Promise.map不知道何時繼續。