我有以下出色的代码。不幸的是,每个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响应数组进行一些处理。