2017-04-03 47 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不知道何时继续。