我正在玩 switchMap 运算符,以清楚地了解“切换”的内部可观察对象发生了什么。
起初我认为 switchMap 只是从切换的内部 observable 中“取消订阅”,但后来我意识到它实际上是“取消订阅并完成”内部 observable。
为了确认我已经写了这个小片段: https ://codesandbox.io/s/relaxed-meninsky-c5jmw?fontsize=14
如您所见,在主题第二次发出时正确调用了finalize()运算符,但是:
为什么不调用tap运算符的完整处理程序?
不知何故,我对这个运算符的理解只有 80% 感到满意。
与此无关:
我已阅读并观看了有关 switchMap 的大量资料,包括:
- 这个(很棒的)ngconf 来源:https ://medium.com/@shairez/a-super-ninja-trick-to-learn-rxjss-switchmap-mergemap-concatmap-and-exhaustmap-forever-88e178a75f1b
- rxjs 官方文档:https ://rxjs-dev.firebaseapp.com/api/operators/switchMap
而且他们都没有明确说明内部可观察对象是否已取消订阅或取消订阅并已关闭(或者至少我不明白:))
我看过switchMap算子源码,没有提到takeXXX算子,没有那个怎么能完成内层算子呢?
tl;博士
- 您是否确认 switchMap 在切换时完成了内部可观察?
- 为什么水龙头操作员不能按预期工作?
- 如果 switchMap 有效地完成了内部 observable,他怎么能在内部不使用 takeXXX 运算符的情况下做到这一点?