在Angular5/6中的onload方法之外访问filereader内容?

在Angular5/6中的onload方法之外访问filereader内容?,angular,typescript,Angular,Typescript,我正在尝试读取一个文件,其中包含以下代码段 readFile(file: File) { var reader = new FileReader(); console.log(reader.readyState); reader.onload = () => { console.log(reader.result); }; reader.readAsText(file); } 正如预期的那样,console.log()在读取器的on

我正在尝试读取一个文件,其中包含以下代码段

readFile(file: File) {
    var reader = new FileReader();
    console.log(reader.readyState);
    reader.onload = () => {
        console.log(reader.result);
    };
    reader.readAsText(file);
}
正如预期的那样,console.log()在读取器的onload事件中打印文件的内容。但是,我试图从我的
readFile
方法中提取此输出作为返回值

比如说,

onSubmit() {
    let output = this.readFile(this.newImportForm.value.dataFile);
    console.log(output);
}
如何以字符串形式返回文件内容?我可以提出一个解决方案,包括发出事件和做一些复杂的事情,但我想探索一个更优雅的解决方案


提前感谢:)

您不能直接返回字符串,因为
FileReader
异步读取内容

一个更优雅的解决方案是从
readFile
返回承诺或可观察到的内容。比如说

readFile(file: File): Observable<string> {
   const sub = new Subject<string>();
   var reader = new FileReader();

   reader.onload = () => {
      const content: string = reader.result as string;
      sub.next(content);
      sub.complete();
   };

   reader.readAsText(file);
   return sub.asObservable();
}
fileSelected(ev) {
    const file = ev.target.files[0];
    this.readFile(file).subscribe((output) => {
      console.log(output);
    })
  }