Собирать ввод с клавиатуры за определенный промежуток времени - PullRequest
2 голосов
/ 14 июля 2020

Я использую Angular 10 и пытаюсь собрать window:keyup событий в течение определенного времени с помощью RX JS - но, к сожалению, не очень успешно. В основном я хочу ввести данные, и если в течение определенного времени не нажимается никакая клавиша, должен быть отправлен запрос.

fromEvent(window, 'keyup').pipe(
  map((ev: KeyboardEvent) => ev.key),
  scan((acc, value) => acc + value),
  debounceTime(500)
).subscribe(key => {
  console.log(key);
});

Вот как выглядит мой базовый c подход, который в основном делает то, что Я хочу, но не могу удалить результат сканирования в результате подписки.

Есть ли лучший способ добиться желаемого поведения?

1 Ответ

1 голос
/ 14 июля 2020
• 1000 нажата клавиша, он устанавливает внешний Observable. Затем он создает внутренний Observable, наблюдая за каждой нажатой клавишей, пока не пройдет время устранения дребезга 500 мс, после чего он заставит Subject испускать. Затем излучение того же самого Subject убивает внутренний Observable, позволяя внешнему Observable запускаться снова. Не забудьте использовать метод отказа от подписки как для объекта Subject, так и для внешнего Observable.
...