Используйте switchMap когда вам нужно игнорировать предыдущее диспетчеризованное действие при поступлении нового действия.
Используйте mergeMap в том случае, если нужно параллельно обрабатывать все диспетчеризованные действия.
Используйте concatMap тогда, когда действия нужно обрабатывать одно за другим, в порядке их поступления.
Используйте exhaustMap в ситуациях, когда, в процессе обработки ранее поступивших действий, вам нужно игнорировать новые.
Иногда вам, для выполнения некоего действия, могут понадобиться данные из нескольких наблюдаемых объектов.
В подобной ситуации избегайте создания подписок на такие объекты внутри блоков subscribe других наблюдаемых объектов.
Вместо этого применяйте подходящие операторы для объединения команд в цепочки.
Среди таких операторов можно отметить withLatestFrom и combineLatest.