我有以下组件:
data$: Observable < MyApolloQueryResult > ;
constructor(private myService: MyService) {}
ngOnInit() {
this.data$ = this.myService.getData();
}
<div *ngIf="data$ | async as data; else loading">
...
</div>
如您所见,我只订阅组件模板中的Observable
。问题是,只有在上面的async
管道订阅了Observable
之后,我如何触发一个操作(例如在上面的myService
内设置一个变量(,换句话说,在确保这个Observable
不再冷之后。
为了产生副作用,请使用do
运算符。
this.data$ = this.myService.getData().do(value => {
// side effect
})
传递给do
运算符的函数将在每次可观察的发送时被调用,对于每个订阅 - 所以要注意只订阅一次,否则他的效果将发生多次。
但是,这通常意味着您没有完全使用 RxJS 的强大功能。与其做副作用,不如尝试使用一些运算符按照您想要的方式操作流。