Как вызвать Observable после следующего запуска объекта

#angular

#angular

Вопрос:

В моем сервисе у меня есть subject, который запускается при вызове метода.

     export class AuthService {
        isAdmin$ = new Subject();
    
      constructor(private http: HttpClient,
        private utilService: UtilService) {
       }
    
      login(user:User){
          this.isAdmin$.next();
        return this.http.post(url, user);
}

    isAdmin(){
         return this.http.get(`url/permissions`));
      }
    }
  

В моем компоненте я подписываюсь на эту тему. И я хочу вызвать другой метод, который возвращает Observable. Но если я вызываю это так внутри своего компонента, это не работает.

 this.authService.isAdmin$.subscribe(()=>{
    this.authService.isAdmin().subscribe((result)=>{
      this.isAdmin = resu<
    });
  

Итак, как мне вызвать метод, который возвращает Observable после следующего запуска объекта?

Комментарии:

1. что isAdmin() делать?

2. Я действительно не понимаю, что вы хотите сделать. Что такое isAdmin() ?

3. Не могли бы вы поделиться недостающими фрагментами? Или создайте stack-blitz. Подписка внутри подписки всегда является плохой практикой

4. Я добавил отсутствующий метод.

5. Я думаю, ваш метод isAdmin () должен вызываться после вашего метода login (), верно?

Ответ №1:

Может быть, вы можете использовать switchMap или SwitchMapTo :

 this.authService.isAdmin$
  .pipe(
    switchMapTo(this.authService.isAdmin())
  ).subscribe(result => this.isAdmin = result);
  

Комментарии:

1. ДА. Большое вам спасибо. Это то, что я хочу! Это отлично работает.

2. Да, здорово! 🙂