Rxjs - switchMap到http将可观察的字符从热转换为冷
Rxjs - switchMap to http changes observable character from hot to cold
谁能解释一下为什么下面的代码触发请求服务器三次?如果我直接订阅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调用)。
相关文章:
- 如何将 html 特殊字符转换为普通 HTML
- json将字符转换为随机字符
- 如何将字符串中的ascii字符转换为jquery中的字符
- 无法将字符转换为整数值
- 应用不区分大小写的正则表达式后,将大写字符转换回大写
- Javascript Cryptography - 将一个字符转换为另一个字符
- 用javascript将俄语(unicode)字符转换为英语
- 如何将一组ascii字符转换为字符串
- 在Javascript中将字符转换为正确的ASCII扩展整数值
- 俄语字符转换为二进制错误(JavaScript)
- Node.js为什么将BOM字符转换为0xFE 0xFF
- 将大写字符转换为小写字符,将小写字符转换为大写字符(反之亦然)
- 将特殊字符转换为Html编码字符
- 将特殊字符转换为HTML
- 是否有一个javascript函数将字符转换为&代码;等价的
- 在网页抓取中连字符转换成逗号
- 如何在jQuery掩码插件中将特殊字符转换为文字字符
- 如何在PHP中将UTF8字符转换为数字字符实体
- Javascript字符转换
- 土耳其字符转换为英文字符