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将获取该列表并继续进行操作。
请帮助。
答案 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。