Угловой 6 forkJoin против Concat - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть следующий код, который прекрасно работает.К сожалению, каждый 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);
    });
  });
}

... 

Мне очень трудно понять, как последовательно выполнять тяжелые запросы к базе данных.Я пробовал очень много вещей (комбинации pipe, concat, flatMap и т. Д.), Но ни одна из них не компилируется, и я не уверен, что стоит их подробно описывать.Достаточно ли этой информации для кого-либо, чтобы помочь мне в последовательном выполнении этих методов?Я был бы очень признателен.

Все, что я ищу, - это средство замены forkJoin функцией, которая выполняется последовательно, а не параллельно.Мне нужно уведомить другой компонент, когда эти запросы будут завершены, и мне нужно будет немного обработать полученный массив ответов json.

...