为什么这两个可观察量会发出不同的流?
Why are these two observables emitting different streams?
我正在使用弹珠图来显示两个不同的可观察值的输出。第一个使用 switchmap,通过管道传输到另一个 switchmap。第二个 observable 在同一个管道中有两个 switchmaps。
这是两个大理石流:
第一个在内部管道中使用 switchmaps
https://rxviz.com/v/38MavX78
第二个在单个管道内使用开关映射
https://rxviz.com/v/9J9zNpq8
怎么会有不同的结果?
我的理解是 switchMap
的作用与名字听起来的一样——它将 Observable 链从一个 Observable("outer" 一个)切换到另一个("inner" 一个) ).如果外部 Observable 在内部 Observable 完成之前发射,则 switchMap 将取消订阅该内部 Observable,并重新订阅,有效地 "cancelling" 第一个订阅。文档 here.
现在在您的第一个案例中,您已将 switchMap 嵌套到 grandchildren$ 到 switchmap 到 children$ 的内部。因此,当 parent$ 第二次发出时,它将取消切换到 children$ 和切换到 grandchildren$,因为 grandchildren$ 是 children$ 的一部分(嵌套在其中)。
但是,在第二种情况下,您没有嵌套它们。因此,当 parent$ 第二次发出时,它确实会取消 children$ 订阅,但是 children$ 不会发出任何东西 发生这种情况时,留下链进一步下降未受影响。因此 grandchildren$ 一直发射,直到 children$ 实际发射了一些东西,这将是在它被重新订阅到 parent$ 发射后的 1000 毫秒。
希望这是有道理的。
我正在使用弹珠图来显示两个不同的可观察值的输出。第一个使用 switchmap,通过管道传输到另一个 switchmap。第二个 observable 在同一个管道中有两个 switchmaps。
这是两个大理石流:
第一个在内部管道中使用 switchmaps https://rxviz.com/v/38MavX78
第二个在单个管道内使用开关映射 https://rxviz.com/v/9J9zNpq8
怎么会有不同的结果?
我的理解是 switchMap
的作用与名字听起来的一样——它将 Observable 链从一个 Observable("outer" 一个)切换到另一个("inner" 一个) ).如果外部 Observable 在内部 Observable 完成之前发射,则 switchMap 将取消订阅该内部 Observable,并重新订阅,有效地 "cancelling" 第一个订阅。文档 here.
现在在您的第一个案例中,您已将 switchMap 嵌套到 grandchildren$ 到 switchmap 到 children$ 的内部。因此,当 parent$ 第二次发出时,它将取消切换到 children$ 和切换到 grandchildren$,因为 grandchildren$ 是 children$ 的一部分(嵌套在其中)。
但是,在第二种情况下,您没有嵌套它们。因此,当 parent$ 第二次发出时,它确实会取消 children$ 订阅,但是 children$ 不会发出任何东西 发生这种情况时,留下链进一步下降未受影响。因此 grandchildren$ 一直发射,直到 children$ 实际发射了一些东西,这将是在它被重新订阅到 parent$ 发射后的 1000 毫秒。
希望这是有道理的。