Angular5&Rxjs: 等待全部订阅

Angular 5 & Rxjs: Wait for all subscription

我想等我所有的 http 请求完成后再做某事。

在 Angular 5 之前,我使用的是 promises 和 Promise.All

有了 Angular 5 和新的 HttpClient,我将我的承诺变成了可观察的。如果我理解正确的话,我现在必须使用 forkJoin 来替换 Promise.All.

但这是一个问题,因为 forkJoin 期望 Observables 作为参数,但我已经在代码中订阅了那些

ngOnInit() {
    forkJoin([this.getTemplates(), this.getHistory()]).subscribe(
        results => {
            this.isLoading = false;
        }
    );
}

getTemplates(): Observable<any> {

    return this.notifService.getTemplateList()
        .subscribe(
            response => {
                if (response.code === 0) {
                    this.templateList = response.data;
                }
                else {
                    this.openSnackBar(response.formatError());
                }
            },
            error => {
                this.openSnackBar(error);
            });
}

我无法在 forkJoin 的订阅中执行逻辑,因为这些方法(getTemplates()getHistory())需要独立并在其他进程中单独调用。

那么,我该怎么做才能确保所有订阅都已完成?

顺便说一句,上面的代码无法编译,因为方法 getTemplates() return 是 Subscription 而不是 Observable

getTemplates中使用map代替subscribe:

getTemplates(): Observable<any> {
    return this.notifService.getTemplateList()
        .map(response => {
            /* ... */
            return reponse;
        });
}