有没有办法达到合并的Observable的订阅(mergeMap / concatMap / exhaustMap)

时间:2018-03-29 09:38:37

标签: rxjs rxjs5

我正在使用RxJS做一个分页器,我会在调用新页面的任何时候使用主题进行集中。在每个事件中,我使用exhaustMap来检索页面。这样可以防止getPage http调用多次针对同一页面被触发。

this._nextPage$.pipe(
    exhaustMap(nextPageNumber => this.getPage(nextPageNumber))
).subscribe();

但我还要在每个http待处理中显示一个微调器。

使用此代码,如何获得合并的http Observable的订阅? (为了将待处理组件绑定到订阅)

提前谢谢!

[编辑]

我需要/更喜欢使用保留暂挂状态的订阅,原因有两个:

  • 我已经使用了几个基于Subscription
  • 的自定义组件/指令
  • 由于它在许多不同的地方使用,我跳过管理待处理状态而没有太多的样板代码......

以下是显示待处理操作的组件的简单示例

@Component({
  selector: 'anie-busy',
  templateUrl: './busy.component.html',
  styleUrls: ['./busy.component.scss']
})
export class BusyComponent implements OnChanges {

  @Input() subscription;
  isPending = false;

  constructor() { }

  ngOnChanges() {
    if (this.subscription) {
      this.isPending = true;
      this.subscription.add(() => this.isPending = false);
    } else {
      this.isPending = false;
    }
  }

}

1 个答案:

答案 0 :(得分:0)

你可以在两者之间管道运算符来完成它。

this._nextPage$.pipe(
tap(()=>{//loading},
exhaustMap(nextPageNumber => this.getPage(nextPageNumber),
 tap(()=>{// stop loading})
).subscribe();