Angular 6 forkJoin vs concat

时间:2018-11-29 18:26:04

标签: angular concat rxjs6 fork-join

我有以下出色的代码。不幸的是,每个Observable都是一个繁重的数据库查询,因此无法以并行方式执行。

import { Observable } from 'rxjs';

...

public search(criteria: SearchCriteria): void {
  this.searchAllTables(criteria).subscribe((responses: Array<JsonResponse>) => {
    this.progressDialogService.notifyComplete();
  });
}

private searchAllTables(criteria: SearchCriteria): Observable<Array<JsonResponse>> {
  return Observable.forkJoin(
    this.heavyDatabaseQuery1(criteria),
    this.heavyDatabaseQuery2(criteria),
    this.heavyDatabaseQuery3(criteria)
  );
}

private heavyDatabaseQuery1(criteria: SearchCriteria): Observable<JsonResponse> {
  return Observable.create(observer => {
    this.dbService.query1(criteria).subscribe((response: JsonResponse) => {
      observer.next(response);
      observer.complete();
    }, error => {
      observer.error(error);
    });
  });
}

... 

我很难弄清楚如何顺序执行繁重的数据库查询。我已经尝试了很多东西(管道,concat,flatMap等的组合),但是没有一个可以编译,我不确定是否值得详细介绍它们。这是否足以供任何人使用,以帮助我依次执行这些方法?我真的很感激。

我要寻找的是一种用顺序执行而不是并行执行的函数替换forkJoin的方法。这些查询完成后,我需要通知另一个组件,并且需要对所得的json响应数组进行一些处理。

0 个答案:

没有答案