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