这是我的相关代码:
private searchClickSubject:Subject<void>; // Submit form
private searchClick$:Observable<any>;
private metrics$:Observable<MetricGroup>;
constructor() {
// Prepare observers
this.searchClickSubject = new Subject<void>();
this.searchClick$ = this.searchClickSubject.asObservable();
}
public ngOnInit() {
// Grab search button click event
this.searchQuery$ = this.searchClick$.pipe(
map(() => <Query>{
offset: 0,
limit: AmetriquesComponent.DEFAULT_PAGE_SIZE
})
);
const loading = () => tap(() => this.loadingPage());
const getAggregatedMetrics = () => switchMap((query: Query) => this.service.getAggregatedMetrics(query));
const loaded = () => tap((aggregatedMetrics: MetricGroup) => this.loadedMetric(aggregatedMetrics));
this.metrics$ = this.searchQuery$
.pipe(
loading(),
getAggregatedMetrics(),
loaded(),
share()
);
}
首先,我认为searchClick$
很热门,因为无论附加了什么订阅,表单都会在提交事件中生成。
如您所见,发出“提交”事件后,我发出了一个http请求。因此,对于发出的每个“提交表单”,都会发出一个新的http请求。
当我在最后一个Observable上附加订阅时,会发出一个单独的http请求,因此听起来第一个Observable打开了一个冷的Observable。
您如何看待我的精打细算?
答案 0 :(得分:0)
我仍然认为这是一个热门观察,因为它永远不会发出完整的通知。 getAggregatedMetrics
的内部订阅将发出一个订阅,而不发出外部订阅。 share()
还会根据this article将冷的可观察物变热。除非我不明白这个问题?