Как я могу подписаться на другой метод обслуживания с помощью условного оператора?

Не могу понять, как подписаться на нужный метод службы Angular в зависимости от условного оператора

        // this.someService.someMethod depending on the conditional statement
  .pipe(takeUntil(this.unsubscribe$))
  .subscribe((items) => {
    this.someData = items;
  });

2 ответа

Вы можете использовать условный оператор RxJs для достижения этого, если обе ваши службы возвращают Observable или Promise.

The iffоператор принимает 3 аргумента, первый из которых является вашим условием, а второй и третий — вашими различными службами, которые возвращают Observable/Promise.

Если условие trueподпишись на первую, если она есть falseподписаться на второй observable

       iif(
      () => {
           //Add your condition here
           return a + b === 4;
         },
         this.someService.someMethodWhenTrue(),
         this.someService.someMethodWhenFalse()
     )
     .pipe(takeUntil(this.unsubscribe$))
     .subscribe((items)=> {
         this.someData = items;
     });

Я рекомендую вам прочитать это https://www.learnrxjs.io/learn-rxjs/operators/conditional/iif

Вы можете сделать следующее, если могут быть разные сервисы для использования:

      let source$: Observable<any>;

if ( conditionA ) {
  source$ = this.someService.someMethodA()
} else {
  source$ = this.someService.someMethodB()
}

source$
  .pipe(takeUntil(this.unsubscribe$))
  .subscribe((items) => {
    this.someData = items;
  });

или только сохранение имени метода, если используется только одна служба. Также это зависит от того, что для вас более читабельно.

      let methodName: string;

if ( conditionA ) {
  methodName = 'someMethodA';
} else {
  methodName = 'someMethodB';
}

this.someService[methodName]()
  .pipe(takeUntil(this.unsubscribe$))
  .subscribe((items) => {
    this.someData = items;
  });
Другие вопросы по тегам