Как долго задерживается наблюдаемое при использовании debounceTime? - PullRequest
0 голосов
/ 30 октября 2019

В этом примере: https://rxviz.com/v/0oqKpbWJ задержка во времени от первого интервала до момента, когда значение выводится из оператора debounceTime, составляет 4 секунды.

Есть ли способ узнать, что / бытьв состоянии войти в окно, для которого debounce отменил?? 1005 *

1 Ответ

2 голосов
/ 30 октября 2019

Да, вам нужен оператор timeInterval https://rxjs.dev/api/operators/timeInterval

Поставьте его после debounceTime

Обновление:

хорошо, я понял. Вам нужен пользовательский оператор наверняка. Попробуйте это

import { fromEvent, OperatorFunction } from 'rxjs';
import { debounceTime, tap, map } from 'rxjs/operators';

const clicks = fromEvent(document, 'click');
const result = clicks.pipe(debounceTimeWithIntervalTracking(1000));
result.subscribe(x => console.log(x));

function debounceTimeWithIntervalTracking<T>(time: number): OperatorFunction<T, { value: T, delayedFor: number }> {
  let startedTime = new Date().getTime();
  let restart = true;
  return src$ => src$.pipe(
    tap(() => {
      if (restart) {
        startedTime = new Date().getTime();
      }
      restart = false;
    }),
    debounceTime(time),
    map(value => {
      const delayedFor = new Date().getTime() - startedTime;
      restart = true;
      return { value, delayedFor };
    })
  )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...