为什么这两个可观测对象发出不同的流?

时间:2019-09-12 20:07:35

标签: rxjs nested switchmap

我正在使用大理石图显示两个不同的可观察对象的输出。第一个使用切换图,该切换图通过管道传递到另一个切换图。第二个可观察对象在同一管道中具有两个切换图。

这是两条大理石流:

第一个在内部管道内部使用switchmaps https://rxviz.com/v/38MavX78

第二个在单个管道中使用switchmaps https://rxviz.com/v/9J9zNpq8

他们为什么会有不同的结果?

1 个答案:

答案 0 :(得分:1)

我的理解是switchMap的名称听起来很像-它将可观察链从一个可观察链(“外部”链)切换到另一个(“内部”链)。如果外部Observable在内部Observable完成之前发出,则switchMap将从该内部Observable取消订阅,然后重新订阅,从而有效地“取消”了第一个订阅。文档here

现在,在第一种情况下,您已将switchMap嵌套到孙子$,并且将switchmap嵌套到children $。因此,当parent $第二次发出时,它将取消切换为childs $和切换为grandchildren $的原因,因为grandchildren $是child $的一部分(嵌套在其内部)。

但是,在第二种情况下,您没有嵌套它们。因此,当parent $第二次发出时,确实会取消children $的订阅,但是当发生这种情况时children $ 将不会发出任何东西 ,从而使链条保持原样。因此,孙子代$一直发射,直到子代$实际发射出某个东西为止,这将在父子发射时被重新订阅之后的1000毫秒。

希望这是有道理的。