对HttpClient结果进行长时间轮询并流式传输到CSV文件

Iam*_*ker 5 httpclient rxjs angular

问题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));
Run Code Online (Sandbox Code Playgroud)

}