在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);
})
}