Я создаю страницу с несколькими формами и хочу обнаруживать события mousedown, focus и blur для каждой из этих форм.
В большинстве случаев они генерируются одновременно (например, щелчок по одной форме, когда другая уже выбрана, излучает «размытие» и «мышление»). Цель состоит в том, чтобы обработать только один из них.
Я создал Observable под названием Interactions $, которое испускает значения, которые являются объектами «Event», такими как mousedown, focus или blur.
Я использую канал для этого Observable, и теперь у меня есть два варианта оператора:
- debounceTime (100), чтобы обрабатывать только последний из них
- throttleTime (100), чтобы обрабатывать только первый из них.
this.interaction$
.pipe(
debounceTime(100),
tap(evt => console.log('processing event' + evt))
)
.subscribe();
В идеале я хочу, чтобы события mousedown и focus обрабатывались поверх события размытия, но проблема в том, что при взаимодействиях $ испускает:
- "mousedown" появляется перед "blur".
- "focus" испускается после "размытия"
Итак, мой вопрос:
Есть ли способ применить debounceTime () или throttleTime () в зависимости от исходного значения?
РЕДАКТИРОВАТЬ:
Это взаимодействие $ является субъектом, значения которого передаются в этот обработчик событий:
onFieldInteract(field: string, evt: Event) {
this.interaction$.next(new FormFieldInteraction(field, evt.type));
}
где FormFieldInteraction - это просто класс с двумя строковыми свойствами.
РЕДАКТИРОВАТЬ 2:
В основном я хочу что-то вроде этого, но я не уверен, есть ли для этого какой-либо оператор rxjs:
this.interaction$.pipe(
// if event.type === 'blur',
debounceTime(100),
// else
throttleTime(100),
tap(evt => this.fieldInteract.emit(evt))
).subscribe();
interactions$
Observable? Я думаю, чтоmerge
будет работать там, но сначала вы должны рассказать, какintercations
выглядит. - person Patryk Panek   schedule 16.07.2019this.interaction$
генерировал события другого типа? Можно ли решить вашу проблему, если бы у вас были разные Observables для разных типов событий? - person Goga Koreli   schedule 16.07.2019this.interaction$
, потому что я хотел объединить все 3 события в один источник, чтобы я мог заблокировать / дросселировать их и обрабатывать только одно - person Tomás Law   schedule 16.07.2019