创建在两个事件之间发生点击时发出的可观察对象

Create observable that emits when a click occurs between two events

我想编写一个在开始和结束事件之间发生点击时发出的可观察对象。一个开始事件总是保证在下一个开始事件之前跟一个结束事件(对于结束事件反之亦然)。也就是说,序列总是保证看起来像这样:

start -> end -> start -> end -> ...

我目前的设置是这样的:

start$
  .pipe(
    switchMapTo(click$.pipe(take(1), takeUntil(end$)),
  )
  .subscribe(() => {
    console.log('click between start and end!');
  })

这是最好的设置方式吗?是否有一些替代的简单运算符我可以用来做与上述等效的操作而不依赖于 switchMapToswitchMap?谢谢!

考虑使用单个 BehaviorSubject 作为开关,如下所示:

declare const toggle$: BehaviorSubject<boolean>;
declare const click$: Observable<Event>;

click$.pipe(
    withLatestFrom(toggle$),
    filter(([, predicate]) => predicate)
);