作者:在刀尖上起舞66_596 | 来源:互联网 | 2022-12-08 13:59
问题1:
如何实现相同的行为?但是相反,Observable.interval
它将由回调调用。
例如:
我有5000ms
时间间隔,但是我的服务器非常慢,并且之后没有得到结果5000ms
。但是下一个调用是在之后调用的5000ms
。我不要那样 我想从服务器返回结果后,它将调用下一个调用。
问题2:
如何将结果立即流式传输到csv文件,而不一个接一个地创建多个文件。对于当前的实现,我使用FileSaver
可以在中运行IE11
。我想继续使用它。有没有一种方法可以将数据流式传输到文件,而不是将其收集到数组中,因为我的数据集很大。像1m行,等等...
例如:
const progress = Observable.interval(1000)
.switchMap(() => this.messageService.getResults(query))
.map(messageResult => messageResult)
.subscribe((data: MessagesResult) => {
inProcess = true;
if (!data.isMoreResults && data.auditMessageList.length === 0) {
this.fileSaver.save(`result.csv`, csvData);
inProcess = false;
this.logger.info('Download file finished...');
progress.unsubscribe();
}
const start = this.filterModel.offset * this.filterModel.limit;
const rows = [...csvData];
rows.splice(start, 0, ...data.auditMessageList);
csvData = rows;
if (inProcess) {
this.logger.info('Exporting in progress...');
}
query.offset++;
}, error => this.logger.error(error));
}