抓住回调异步函数完成的时刻

问题描述 投票:1回答:1

我有这个代码来呈现一个用于上传的选择文件:

  //1
  <input type="file" multiple id="my_html_uploader" />


//2
var files = myHtmlUploaderElem.files;
if (files.length > 0) {
  for (var i = 0, file1; file1 = files[i]; i++) {
    var reader = new FileReader();
    reader.onload = (function(file2, i2) {
      return function(e) {
        alert("done!");
      };
    })(file1, i);

    reader.readAsDataURL(f);
  }
}

我怎么能抓住reader.onload(...)的回调完成的那一刻

a)个人档案

b)所有已选择的文件

?

javascript html html5 asynchronous
1个回答
0
投票

创建承诺,然后您可以使用Promise.all等待所有:

const promises = []; // keep as much constant as possible

for (const file of files) { // way more beautiful, no need for an IIFE with "const" or "let"
  let reader = new FileReader();

  promises.push(new Promise((resolve, reject) => { // short for: function(resolve, reject) {
    reader.onload = event => resolve(event.target.result);
    reader.onerror = reject;
  }));

  reader.readAsDataURL(file);
}

Promise.all(promises).then(results => {
  alert("all loaded");
  // results is an array of file contents
}).catch(error => {
  // one of the files failed to load, handle that here
});
© www.soinside.com 2019 - 2024. All rights reserved.