Angular 5& Rxjs:等待所有订阅

时间:2018-02-02 13:41:07

标签: javascript angular rxjs5

我想在做某事之前等待所有的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()&amp; getHistory())需要是独立的,并在其他进程中单独调用。

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

顺便说一下,上面的代码没有编译,因为方法getTemplates()返回Subscription而不是Observable

1 个答案:

答案 0 :(得分:2)

使用map代替subscribe中的getTemplates

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