Angular将NgBusy与BehaviorSubject和ExhaustMap一起使用

时间:2018-10-13 04:55:08

标签: angular

switchMap上将ng-busy与更复杂的RxJS运算符(如{{1})或exhaustMap一起使用而又不订阅订阅块中的可观察对象时,最佳实践是什么?

如果您在BehaviorSubject上设置了this.busy,它将一直很忙,因为它离开了BehaviorSubject而不是Http请求订阅。

BehaviorSubject

据我从this之类的文章中了解到,使用可观察变量时,以下代码并不是最佳做法,但我看不出还有其他方法。

  

但这就像Observableception,对吗?不,可观察者不喜欢   在Observables内。

public currentPage$ = new BehaviorSubject(1);

// ...

// Not sure how to use "busy" this way:
this.currentPage$
  .pipe(
    exhaustMap((page: number = 1) =>
      (page) ? this.getAlerts(page) : empty()
    ),
    map((response: HttpResponse<Alert[]>) => 
      response.results
    )
  )
  .subscribe(
    (alerts: Alert[]) => { ... },
    (error: any) => { ... }
  );

1 个答案:

答案 0 :(得分:0)

如果您希望在管道流中触发副作用,则tap运算符是goto:

this.currentPage$.pipe(
  exhaustMap((page: number = 1) => { 
    if(page) {
      const obs$ = this.getAlerts(page).pipe(share());
      this.busy = obs$.subscribe();
      return obs$;
    } else
      return empty();
  }),
  map((response: HttpResponse<Alert[]>) => response.results),
).subscribe(
  (alerts: Alert[]) => { ... },
  (error: any) => { ... }
);