【发布时间】:2022-01-04 07:08:56
【问题描述】:
我想导入 excel,我使用 SheetJS 来做到这一点。
getSheet<T>(fileReader: FileReader, headers: string[], index: number): Observable<T[]> {
return new Observable((observer) => {
fileReader.onload = ((ev: ProgressEvent): void => {
let workbook;
.......
workbook = XLSX.read(binary, { type: 'binary', cellDates: true, cellStyles: true });
let getData = XLSX.utils.sheet_to_json<T>(workbook.Sheets[workbook.SheetNames[index]], { header: headers, range: 1 });
observer.next(getData);
observer.complete();
})
}); }
在另一个函数中,我称之为 observable 函数。
getExcel(evt: Event) {
const fileReader = new FileReader();
fileReader.readAsArrayBuffer((<any>evt.target).files[0]);
let getdataA$!: Observable<interfaceA[]>
let getdataB$!: Observable<interfaceB[]>
let getdataC$!: Observable<interfaceC[]>
getdataA$ = this.getSheet(fileReader, this.headerA, 0);
getdataB$ = this.getSheet(fileReader, this.headerB, 1);
getdataC$ = this.getSheet(fileReader, this.headerC, 2);
const observable = forkJoin({
getdataA$,
getdataB$,
getdataC$,
});
}
我使用 RxJS 操作符,例如 forkJoin,combineLatest
但它不起作用............
有人可以帮我解决这个问题吗?
【问题讨论】:
-
您是否订阅了代码中某处的 observable ?
-
是的,我确实在 forkJoin 方法之后订阅了 observable 变量。我使用 console.log 查看数据。
-
fileReader.onload 是一个异步函数。会影响结果吗?
标签: angular typescript rxjs