Rxjs - switchMap到http将可观察的字符从热转换为冷

Rxjs - switchMap to http changes observable character from hot to cold

本文关键字:字符 转换 观察 switchMap http Rxjs      更新时间:2023-09-26

谁能解释一下为什么下面的代码触发请求服务器三次?如果我直接订阅http.get(),我知道它是冷可观察的,所以它会导致调用server 3次,我需要使用.share()来避免这种情况。但是当我订阅热门主题时,为什么会有同样的行为?奇怪的:

let testTrigger = new Subject<any>();

let testTask$ = testTrigger.switchMap(()=> this.restClient.get('onet'));
testTask$.subscribe(console.log.call(console));
testTask$.subscribe(console.log.call(console));
testTask$.subscribe(console.log.call(console));
testTrigger.next(1);

事实上,大多数操作符都会这样做。即,如果obs是热的,那么obs.op通常是冷的。一些操作符也返回热可观察对象(例如groupBy)。最后,你需要阅读文档或测试,看看你手中的可观察对象的性质。

要了解更多细节,可以查看Hot and Cold observables: are there ' Hot '和& # 39;冷# 39;运营商?。

修改代码为:

let testTask$ = testTrigger.switchMap(()=> this.restClient.get('onet')).share();

这样所有订阅将共享同一管道。我猜,当您订阅时,您触发映射(因此http调用)。