#rxjs #rx-java
#rxjs #rx-java
Вопрос:
Я хочу создать наблюдаемый объект, который генерируется при щелчке между начальным и конечным событиями. За событием start всегда гарантированно следует событие end перед следующим событием start (и наоборот для события end). То есть последовательность всегда гарантированно будет выглядеть следующим образом:
start -> end -> start -> end -> ...
В настоящее время он настроен следующим образом:
start$
.pipe(
switchMapTo(click$.pipe(take(1), takeUntil(end$)),
)
.subscribe(() => {
console.log('click between start and end!');
})
Это лучший способ настроить это? Существуют ли какие-либо альтернативные простые операторы, которые я могу использовать для выполнения эквивалента приведенного выше, не полагаясь на switchMapTo
or switchMap
? Спасибо!
Ответ №1:
Рассмотрите возможность использования single BehaviorSubject
в качестве переключателя, как показано ниже:
declare const toggle$: BehaviorSubject<boolean>;
declare const click$: Observable<Event>;
click$.pipe(
withLatestFrom(toggle$),
filter(([, predicate]) => predicate)
);