【发布时间】:2019-06-09 00:19:44
【问题描述】:
我有一个 HTTP 请求,我想将其结果共享给多个组件。 HTTP 请求当然会返回一个Observable。我希望多个组件能够订阅它而不触发额外的 HTTP 请求。
我在一个组件中使用Subject 实现了这一点,该组件根据需要发出 HTTP 请求,并有另一种订阅主题的方法。
虽然这行得通 - 这似乎有点矫枉过正,而且肯定有更好的方法来做到这一点。
学科服务
@Injectable()
export class EventService {
subject: BehaviorSubject<any> = new BehaviorSubject<any>(Observable.create());
constructor(private api: Api) {}
fetch = () => {
this.subject.next(
this.api.getUsers().pipe(share())
);
};
listen = (): Observable<any> => {
return this.subject.asObservable();
};
}
和一个订阅者
@Injectable
export class EventListenerA {
constructor(private eventService: EventService){
eventService.fetch(); // make initial call
eventService.listen().subscribe(o => {
o.subscribe(httpResponse => {
//do something with response
})
});
}
}
第二个订阅者
@Injectable
export class EventListenerB {
constructor(private eventService: EventService){
eventService.listen().subscribe(o => {
o.subscribe(httpResponse => {
//do something else with response
})
});
}
}
当我从管道链中删除 share() 时,会发出多个网络请求。有没有更优雅/正确的方法将 observable 传递给 next 的 Subject ?或者完全是另一种模式
【问题讨论】:
标签: angular rxjs observable reactive-programming