filereader.onload完成读取文件后调用函数

时间:2019-03-01 05:32:43

标签: javascript angular typescript

submitTCtoDB(updateTagForm:any){
    for(let i=0;i<this.selectedFileList.length;i++){

  let file=this.selectedFileList[i];
  this.readFile(file, function(selectedFileList) {
      this.submitTC(updateTagForm,selectedFileList);
});

     }

    }

  }

readFile(file, callback){
    let fileReader: FileReader = new FileReader();
  fileReader.onload= () => {
    this.fileContent=fileReader.result;
    if(this.fileContent.indexOf("END DATA | BEGIN RESULTS") != -1){

    alert("Multiple testcases found in "+file.name+" file.  Please separate/save testcases in Calc Builder. Then reimport");

    const index: number = this.selectedFileList.indexOf(file);

    if (index > -1) {
     this.selectedFileList.splice(index, 1);
     console.log(file.name+"removed from the list");
 }  



}
    fileReader.readAsText(file);

  }
  callback(this.selectedFileList);
  }

submitTC(updateTagForm:any,selectedFileList){
    //process the selectedFileList came after the readFile has finished erading the files
  }

我想在fileReader完成读取文件后执行SubmitTC函数。不确定是否正确实现了readFile()回调。请帮助编写此逻辑。 流程>当用户单击时,将调用submitTCtoDB,然后readFile应该工作并读取文件,并在从其中拼接不需要的元素之后返回selectedFileList。然后,submitTC将获取该列表并继续进行操作。

请帮助。

1 个答案:

答案 0 :(得分:0)

您应该使用es6箭头函数=>而不是function声明来获取当前类方法的实例。

submitTCtoDB(updateTagForm:any){
  for(let i=0;i<this.selectedFileList.length;i++){

    let file=this.selectedFileList[i];
    this.readFile(file, (selectedFileList) => {
        this.submitTC(updateTagForm,selectedFileList);
     });

   }

 }

要了解文件读取是否完成,可以使用FileReader.result属性。 null直到文件读取完成为止。

根据mozilla文档

  

一个适当的字符串或ArrayBuffer,取决于使用了哪种读取方法来启动读取操作。如果读取尚未完成或不成功,则该值为null。