在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) => { ... }
);
答案 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) => { ... }
);