Angular2可观察的份额不起作用
Angular2 Observable共享无效并且重复http调用
BuildingService.ts @Injectable() export class BuildingService { constructor(private http: Http){ } buildings$: Observable<Building[]>; this.buildings: Building[]; getData() : Observable<Building[]>{ this.buildings$= this.http.get('http://localhost:8080/buildings').share().map(this.extractData); this.buildings$.subscribe(buildings => this.buildings = buildings); return this.buildings$; } private extractData(res: Response) { let body = res.json(); return body; } } component1.ts export class component1 { constructor( private buildingService: BuildingService) {} this.subscription = this.buildingService.getData() .subscribe(buildings => console.log(buildings),error => this.errorMessage = <any>error); } component2.ts export class component2 { constructor( private buildingService: BuildingService) {} this.subscription = this.buildingService.getData() .subscribe(buildings => console.log(buildings),error => this.errorMessage = <any>error); } 分享不起作用,多个http呼叫正在进行.即使我尝试了this link的代码 但没用 有人可以告诉我如何使用Angular Observable避免重复的http调用吗? 解决方法
我认为这只是误解了share()的作用.
当你调用this.buildings $.subscribe(…)时,它会生成一个ConnectableObservable,这要归功于share()运算符,紧接着是connect(). 如果在HTTP请求处于挂起状态时再进行另一次订阅,它只会向ConnectableObservable添加另一个Observer,并且当响应准备就绪时,它将被发送给两个Observers.但是,如果你让this.buildings $完成,那么你再次订阅它会发出另一个HTTP请求,因为ConnectableObservable没有连接到它的源. 你想要的是.publishReplay(1).refCount()(或者自RxJS 5.4.0以来的shareReplay(1))重放从源发出的最后一项.很可能你也想要附加take(1)来正确完成链. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |