Моя цель состоит в том, чтобы издавать «привет снова» с интервалом в 1 секунду, пока не будет нажата клавиша, и продолжать работу при каждом щелчке мыши.
Вот мой код:
import { of, fromEvent, interval } from 'rxjs';
import { map, tap, takeUntil,take, repeatWhen, shareReplay, switchMap , takeLast} from 'rxjs/operators';
const fromKeyUp$ = fromEvent(window, 'keyup').pipe(tap(_=> console.log('keyup')));
const fromMouseUp$ = fromEvent(window, 'mouseup').pipe(tap(_=> console.log('mouseup')));
const source = interval(1000).pipe(tap(_ => {
console.log('hi again');
}), takeUntil(fromKeyUp$), repeatWhen(() => fromMouseUp$));
source.subscribe();
Проблема в том, что при слишком большом количестве щелчков мышью => «снова снова» издает больше раз, чем обычно.
Я пытался использовать switchMap
, чтобы отменить предыдущую мышиную, например:
const fromMouseUp$ = fromEvent(window, 'mouseup').pipe(switchMap(() => tap(_=> console.log('mouseup'))));
но это не сработало, так как тап не предназначен для создания.
Есть идеи?