Как я могу подписаться на другой метод обслуживания с помощью условного оператора?
Не могу понять, как подписаться на нужный метод службы 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;
});