javascript - 如何为 FileReader 编写回调?

标签 javascript filereader

我正在尝试上传多个附件。 首先,我从用户界面获取附件,然后将它们转换为 JSON ,然后我需要进行服务器调用。 在此我使用 FileReader。

        //showing ajax loader
        component.set("v.showLoadingSpinner", true);

       //getting attached files
        var files = component.find("fileId").get("v.files");
        var details = {};    //JS Object need to send server
        details.files = [];

        for (var i = 0; i < files.length; i++) 
        {      
            (function(file) {
                var name = file.name;
                var reader = new FileReader(); 
                reader.fName = files[i]['name'];
                reader.fType = files[i]['type'];
                reader.i = i;
                reader.onload = function(e) {
                    var fileContents = reader.result;
                    var base64 = 'base64,';
                    var dataStart = fileContents.indexOf(base64) + base64.length;
                    fileContents = fileContents.substring(dataStart);
                    var startPosition = 0;
                    var endPosition = Math.min(fileContents.length, startPosition + 750000);
                    var getchunk = fileContents.substring(startPosition, endPosition);
                    var fDetails = {};
                    fDetails.fileName = reader.fName;
                    fDetails.base64Data = encodeURIComponent(getchunk);
                    fDetails.contentType = reader.fType;
                    details.files.push(fDetails);

                }
                reader.readAsDataURL(file);
            })(files[i]);

     // I want to make a server call here with data in "details" object.
   console.log(details);   

But I'm not getting data in above console log.

请帮助我实现这一目标。

最佳答案

您可以使用 promise :

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

https://davidwalsh.name/promises

https://developers.google.com/web/fundamentals/primers/promises

jQuery 还提供 $.when() 函数:

https://api.jquery.com/jquery.when/

还有promisejs你可以做这样的事情:

function readJSON(filename){
  return new Promise(function (fulfill, reject){
    readFile(filename, 'utf8').done(function (res){
      try {
        fulfill(JSON.parse(res));
      } catch (ex) {
        reject(ex);
      }
    }, reject);
  });
}

关于javascript - 如何为 FileReader 编写回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46911954/

相关文章:

jquery - html5 filereader - 我如何手动创建文件列表?

java - 为什么我的 if 条件不起作用(if (n>2))?

c - 如何将文件逐行读入结构体?

javascript - 选择多次显示的菜单

javascript - 在 pageload 方法之后调用 Document.ready 方法 - Jquery 3.3.2

javascript - Bootstrap 模态 - 打开元素的奇怪位置

javascript - Vue.js 单文件组件无法按预期工作

javascript - 是否可以剪切部分视频并仅使用 html5 和 js 将其上传到服务器

javascript - 使用 JavaScript 和 HTML5 预览图像

javascript - 通过循环数组填充表