Создать наблюдаемый объект, который генерируется при щелчке между двумя событиями

#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)
);