我正在使用大理石图来显示两个不同的 observables 的输出。第一个使用 switchmap,将管道连接到另一个 switchmap。第二个 observable 在同一个管道中有两个 switchmap。
这是两个大理石流:
第一个使用内部管道内的开关图 https://rxviz.com/v/38MavX78
第二个在单个管道内使用 switchmaps https://rxviz.com/v/9J9zNpq8
他们怎么会有不同的结果?
我正在使用大理石图来显示两个不同的 observables 的输出。第一个使用 switchmap,将管道连接到另一个 switchmap。第二个 observable 在同一个管道中有两个 switchmap。
这是两个大理石流:
第一个使用内部管道内的开关图 https://rxviz.com/v/38MavX78
第二个在单个管道内使用 switchmaps https://rxviz.com/v/9J9zNpq8
他们怎么会有不同的结果?
我的理解是,switchMap
它的名字听起来像 - 它将 Observable 链从一个 Observable(“外部”)切换到另一个(“内部”)。如果外部 Observable 在内部 Observable 完成之前发出,则 switchMap 将取消订阅该内部 Observable,然后重新订阅,有效地“取消”第一个订阅。文档在这里。
现在,在您的第一种情况下,您已将 switchMap 嵌套到 grandchildren$ 内部的 switchmap 到 children$。因此,当 parent$ 第二次发出时,它将取消切换到 children$ 和切换到 grandchildren$,因为 grandchildren$ 是 children$ 的一部分(嵌套在其中)。
但是,在第二种情况下,您没有嵌套它们。因此,当 parent$ 第二次发出时,它确实会取消 children$ 订阅,但是当发生这种情况时,children$不会发出任何东西,从而使链更往下保持不变。因此,grandchildren$ 一直在发出,直到 children$ 实际发出一些东西,这将是在 parent$ 发出时重新订阅后的 1000 毫秒。
希望这是有道理的。