Насколько я понимаю, switchMap
делает то, что звучит из названия - переключает цепочку Observable с одного Observable («внешнего») на другое («внутреннее»). Если внешний Observable испускается до завершения внутреннего, тогда switchMap откажется от этого внутреннего Observable и повторно подпишется, фактически «отменив» первую подписку. Документы здесь.
Теперь в вашем первом случае вы вложили switchMap в grandchildren$ ВНУТРИ switchmap в Children$. Поэтому, когда parent$ испустит второй раз, он отменит переключение на children$ И переключение на grandchildren$, так как grandchildren$ является частью Children$ (вложенной в него).
Однако во втором случае они не вложены друг в друга. Поэтому, когда parent$ генерируется во второй раз, это действительно отменяет подписку children$, но children$ ничего не выдает, когда это происходит, оставляя цепочку ниже нетронутой. Таким образом, grandchildren$ продолжает излучать до тех пор, пока child$ действительно не излучает что-то, что будет через 1000 мс после повторной подписки на него, когда parent$ излучает.
Надеюсь, это имеет смысл.
person
dmcgrandle
schedule
12.09.2019