debounceTime только после первого значения - PullRequest
0 голосов
/ 13 марта 2019

Есть ли простой способ сделать debounceTime мгновенным для первого значения?

searchQueries.pipe(debounceTime(1000))

допустим, я искажаю поисковые запросы на 1 секунду.

Насколько я понимаю, это приведет к задержке в 1 секунду при первом поиске, но я хочу, чтобы первый поисковый запрос был мгновенным.

(например, в этом примере https://stackblitz.com/edit/typescript-adheqt?file=index.ts&devtoolsheight=50, если я быстро наберу 123, он будет регистрировать только 123, но я хочу, чтобы он записал 1, а затем зарегистрировать 123)

я мог бы попробовать что-то вроде

merge(searchQueries.pipe(first()),searchQueries.pipe(debounceTime(1000)))

но тогда это потенциально добавит задержку ко второму поиску, но, вероятно, достаточно хорошо.

Есть ли способ настроить debounceTime, которого мне не хватает? или я должен использовать газ или что-то еще?

1 Ответ

1 голос
/ 13 марта 2019

Вы можете использовать multicast или, может быть, даже throttleTime:

searchQueries.pipe(
  multicast(new Subject(), s => merge(
    s.pipe(take(1)),
    s.pipe(skip(1), debounceTime(1000)),
  )),
);

Начиная с RxJS 6, оператор throttleTime принимает параметр конфигурации, в котором вы можете указать ему испускать как начальные, так и конечные выбросы. Может быть, это будет делать то, что вы хотите вместо debounceTime.

searchQueries.pipe(
  throttleTime(1000, undefined, { leading: true, trailing: true }),
);
...