У меня есть таймер, поэтому он должен делать паузу нажатием кнопки «подождать». Но нажатие кнопки имеет свое условие. Это должно быть 2 щелчка, а время между первым и вторым щелчком не должно быть> 500 мл. Поэтому мне нужно предпочтительно использовать операторы rxjs

const observable$ = interval(1000).pipe(mapTo(1));
const action$ = new Subject ();
const wait$ = action$.pipe(filter( action => action === false);

const timer$ = merge(wait$, start$)
  .pipe(
    startWith(true),
    // if timer is paused return empty observable
    switchMap(val => (val ? observable$ : EMPTY)),
    scan((acc, curr) => (curr ? curr + acc : acc))        
  )
0
Александр Соколов 8 Сен 2021 в 21:46
Пример «двойного щелчка», который здесь, может вам подойти.
 – 
Drew Reese
8 Сен 2021 в 21:54
К сожалению, этот пример неверен. Существует проблема, возникшая по этому поводу более двух лет назад :(
 – 
NickL
1 Окт 2021 в 12:27

1 ответ

Лучший ответ

Вы можете попробовать что-то вроде этого:

buttonClicks.pipe(
  bufferTime(500),
  filter((clicks) => clicks.length > 1)
);

Он создает буферы событий в окнах 500 мс, а затем излучает, когда в буфере находится более одного события щелчка.

0
NickL 1 Окт 2021 в 12:40