Как сделать из двух сервисов один сервис? - PullRequest
0 голосов
/ 31 марта 2020

У меня есть angular 8 приложение и сервис, например:

export class ProfileUserService {
  user$ = this.authService.loginStatus().pipe(take(1));

  constructor(private profileService: ProfileService, private authService: AuthService) {}

  getProfile(): Observable<ProfileApi> {
    return this.user$.pipe(mergeMap(({ profile }) => this.profileService.get(profile.participant)));
  }
}

И у меня есть компонент, где я использую сервис, где я вызываю метод, например:

export class SettingsAccountComponent extends FormCanDeactivate implements OnInit, OnDestroy {

 constructor(
    private profileUserService: ProfileUserService){}

 ngOnInit() {
    this.innerWidth = window.innerWidth;
    this.profileSubscription = this.profileUserService.getProfile().subscribe((profile: ProfileApi) => {
      this.profile = profile;
      this.deletePicture = false;
      this.buildForm();
    });
  }




}

Но я хочу вызвать непосредственно в компоненте SettingsAccountComponent: этот сервис:

private profileService: ProfileService

Но проблема заключается в следующем:

 user$ = this.authService.loginStatus().pipe(take(1));

Потому что мне это нужно для получения participantId. Но поэтому мой вопрос заключается в том, как объединить ProfileService, например,

 this.profileSubscription = this.profileService.get().subscribe((profile: ProfileApi) => {
      this.profile = profile;
      this.deletePicture = false;
      this.buildForm();
    });

с:

 user$ = this.authService.loginStatus().pipe(take(1));

, потому что теперь в методе get () он требует ParticipantId

Так что я должен изменить?

Спасибо

1 Ответ

1 голос
/ 31 марта 2020

Я думаю, что switchMap может вам помочь.

Попробуйте:

import { switchMap } from 'rxjs/operators';
...
this.profileSubscription = this.profileService.user$.pipe(
  switchMap(({ profile }) => this.profileService.get(profile.participant))
).subscribe((profile: profileAPI) => {
  this.profile = profile;
  this.deletePicture = false;
  this.buildForm();
});

Я вижу, вы уже сделали mergeMap в вашем обслуживании, switchMap очень похоже .

...