【发布时间】:2017-06-11 02:09:15
【问题描述】:
我有一个 Angular 服务,它异步地向多个组件共享数据流(http 调用)。我需要不时根据用户操作调用 http 服务。
我正在使用 ReplaySubject 来保存加载的值并发送给在 http 调用之后订阅的订阅者。
我想知道是否有办法在进行后续 http 调用之前清除 ReplaySubject 的缓冲区? 在此期间,我怀疑我还需要取消订阅才能不造成泄漏?
服务:
@Injectable()
export class GreatDataService {
public data$: ReplaySubject<any>;
private subs: Subscription;
constructor(private http: Http) {
this.data$ = new ReplaySubject(1);
}
public refresh() {
if (this.subs) {
this.subs.unsubscribe();
this.subs = null;
}
this.subs = this.http.get('/api').subscribe(this.data$)
}
}
顶级部分组件:
...
constructor(private greatDataService: GreatDataService) {}
ngOnInit() {
this.greatDataService.refresh();
}
...
组件 1:
...
constructor(private greatDataService: GreatDataService) {}
ngOnInit() {
this.greatDataService.data$.subscribe(
x => console.log('subscriber 1: ' + x),
err => console.log('subscriber 1: ' + err),
() => console.log('subscriber 1: Completed')
);
...
组件 2:
...
constructor(private greatDataService: GreatDataService) {}
ngOnInit() {
this.greatDataService.data$.subscribe(
x => console.log('subscriber 2: ' + x),
err => console.log('subscriber 2: ' + err),
() => console.log('subscriber 2: Completed')
);
...
【问题讨论】:
标签: angular angular2-services rxjs5