Не похоже, что switchMap - это то, что вам нужно. switchMap используется для «переключения» источника, наблюдаемого под колпаком, чтобы новая наблюдаемая могла излучать в поток. Он обрабатывает отписку от предыдущего источника и подписку на новый.
В вашем случае вы можете просто использовать combineLatest
. Это будет излучать массив всех 3 значений, как только все исходные наблюдаемые издадут значение, и будет продолжать излучать всякий раз, когда любое из них получит новое значение.
authUser$ = this._authService.loggedInUser$;
serial$ = this._userSerialService.getUserSerial();
user$ = this._usersService.getCurrentUser();
data$ = combineLatest([authUser$, serial$, user$]);
data$.subscribe(([loggedInUser, serial, currentUser]) => {
...
});
Может быть удобно отобразить значения для объекта, поэтому их легко получить в вашем шаблоне, например:
data$ = combineLatest([authUser$, serial$, user$]).pipe(
map(([authUser, serial, user]) => ({authUser, serial, user}))
);
Это также удобно, если вы используете asyn c pipe в своем шаблоне, а не подписываетесь в ваш компонент.
<div *ngIf="data$ | async as data">
<ul>
<li>Current User: {{ data.user }}</li>
<li>Logged in User: {{ data.authUser }}</li>
<li>User Serial: {{ data.serial }}</li>
</ul>
</div>