我有以下组件:
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
不再冷了之后。
答案 0 :(得分:1)
为了产生副作用,请使用do
operator。
this.data$ = this.myService.getData().do(value => {
// side effect
})
对于每个订阅,每次observable发出时,都会调用传递给do
运算符的函数 - 所以要小心只订阅一次,否则他的效果会多次发生。
但是,这通常意味着您没有完全使用RxJS的强大功能。请尝试使用some of the operators以您喜欢的方式操作流,而不是产生副作用。