顺序订阅一系列可观察对象

Sequential subscription to an array of observables

在这里,我使用了 rxjs 中的 forkJoin 来并行订阅一组可观察对象。但我想一一订阅,最好的解决方案是什么?

下面是我的代码:

var observables = [];

Observable.forkJoin(observables)
    .subscribe(() => {
        this.msgs = [];
        this.msgs.push({
            severity: 'success',
            summary: 'Saved Successfully'
        });
        this.onSaveComplete();
    }, (error: any) => this.errorMessage = <any>error);
}, (error: any) => this.errorMessage = <any>error);

使用 the switchMap operator 进行一系列 依赖请求 。错误会传播,您可以在链的末尾捕获或以其他方式处理它们。

return this.http.get('something/1')
  .switchMap(res1 => {
    // use res1 if you need it
    return this.http.get('something/2')
  })
  .switchMap(res2 => {
    // use res2 if you need it
    return this.http.get('something/3')
  })
  .subscribe(res3 => {
    // use the final response
    console.log(res3)
  })

替代 forkJoin 意味着您需要按顺序订阅可观察数组。 mergeconcat 是这种情况下的方法。在您的情况下,修改您的代码并在使用 mergeconcat 时在可观察数组的最开头使用扩展运算符。

var observables = [];
Observable.concat(...observables)
            .subscribe(() => {
                this.msgs = [];
                this.msgs.push({
                    severity: 'success',
                    summary: 'Saved Successfully'
                });
                this.onSaveComplete();
            }, (error: any) => this.errorMessage = <any>error);
    }, (error: any) => this.errorMessage = <any>error);