Return 来自 FileReader onload 函数内部的布尔值,使用 angular 4

Return a boolean value from inside the FileReader onload function using angular 4

我正在使用 FileReader 解析我的 csv 数据并仅获取 headers。 我需要检查 headers 并根据 return 值进一步执行。

private checkIfValidFile(file){
    var isValidFile = false;

      var fileContent = new FileReader();
      fileContent.readAsText(file);
      fileContent.onload = () => {
        let text = fileContent.result;
        var data = text.split("\n");
        var headers = data[0].split(",");
        //fileHeaders = headers;
        console.log(headers);
        if (headers.indexOf('"File Name"') > -1) {
          isValidFile = true;
        }
      };
    return isValidFile
}
private uploadFiles(files: any) {
for (let index = 0; index < files.length; index++) {
        var isValidFile = this.checkIfValidFile(files[index]);
        if(isValidFile){
          //Execute some lines
        }
      }
}

但是 return 值在加载之前得到 returned。我该怎么做?

使用 "Promise" 实现这样的目标:

private checkIfValidFile(file):Promise<boolean>{

      var fileContent = new FileReader();
      fileContent.readAsText(file);
      
      return new Promise((resolve,reject)=>{
          fileContent.onload = () => {
          let text = fileContent.result;
          var data = text.split("\n");
          var headers = data[0].split(",");
          //fileHeaders = headers;
          console.log(headers);
          if (headers.indexOf('"File Name"') > -1) {
            resolve(true);
          }
          resolve(false);
        };
      });
      
}
private uploadFiles(files: any) {
for (let index = 0; index < files.length; index++) {
        this.checkIfValidFile(files[index]).then((isValidFile)=>{
           if(isValidFile){
             //Execute some lines
           }
        });
        
      }
}

使用 promise 怎么样?

喜欢:

 private checkIfValidFile(file): Promise<boolean> {
    return new Promise((resolve, reject) => { // RETURN PROMISE FFORM YOUR FUNC

      try {
        var isValidFile = false;

        var fileContent = new FileReader();
        fileContent.readAsText(file);
        fileContent.onload = () => {
          let text = fileContent.result;
          var data = text.split("\n");
          var headers = data[0].split(",");
          //fileHeaders = headers;
          console.log(headers);
          if (headers.indexOf('"File Name"') > -1) {
            isValidFile = true;
            resolve(isValidFile);
          }
        };
      } catch (error) {
        reject(error);
      }


    });

  }
  private uploadFiles(files: any) {
    for (let index = 0; index < files.length; index++) {
      this.checkIfValidFile(files[index]).then((isValidFile) => {
        if (isValidFile) {
          //Execute some lines
        }
      });

    }
  }