异步管道订阅 Observable 后触发操作

Fire Action After async pipe has subscribed to an Observable

我有以下组件:

data$: Observable < MyApolloQueryResult > ;

constructor(private myService: MyService) {}

ngOnInit() {
  this.data$ = this.myService.getData();
}
<div *ngIf="data$ | async as data; else loading">
  ...
</div>

如您所见,我只订阅了组件模板中的 Observable。问题是,我如何触发一个动作(比如在上面的 myService 中设置一个变量)只有 上面的 async 管道订阅了 Observable,换句话说,在确定这个 Observable 不再冷之后。

为了有副作用,使用do operator

this.data$ = this.myService.getData().do(value => {
  // side effect
})

传递给 do 运算符的函数将在每次 observable 发射时被调用,对于每个订阅——所以要小心只订阅一次,否则他的效果会发生多次。


然而,这通常意味着您没有完全使用 RxJS 的强大功能。不要产生副作用,而是尝试使用 some of the operators 以您喜欢的方式操纵流。