Оператор, ожидающий нового значения в течение определенного времени

Я ищу оператор observable, который после выдачи значения будет ждать 500 мс. Если за это время выдается новое значение, оно принимает новое значение и забывает последнее. Если новое значение не передается, он передает это значение дальше.

Я пробовал: delay - он задерживает только каждое значение debounceTime - он создает промежутки между значениями и излучает каждое из них.


person piernik    schedule 26.07.2018    source источник
comment
Вы можете посмотреть auditTime   -  person Picci    schedule 26.07.2018
comment
auditTime звучит как то, что вам нужно, но это зависит от того, хотите ли вы откладывать задержку после каждого значения из исходного Observable. Он думает, что когда auditTime получит значение, оно будет излучать после 500ms и не будет создавать новые таймеры для последующих выбросов из источника.   -  person martin    schedule 26.07.2018
comment
Вы: он создает промежутки между значениями и излучает каждое из них. Документация: может опускать некоторые значения Как вы пришли к своему выводу?   -  person a better oliver    schedule 26.07.2018
comment
@abetteroliver Вы правы. Проблема была где-то в другом месте.   -  person piernik    schedule 27.07.2018


Ответы (2)


Вы можете попробовать операторы throttleTime (500) и last (). Например,

interval(100)
.pipe(
  take(10),
  throttleTime(500),
  last(),
)
.subscribe({
  next: x => console.log('x', x),
  error: error => console.log('error', error),
  complete: () => console.log('complete'),
});

В итоге получится 6 -> выполнено.

person Oleksandr Sachuk    schedule 27.07.2018

взгляни на debounceTime

debounceTime (dueTime: число, планировщик: планировщик): наблюдаемый

Отбросить выданные значения, которые занимают меньше указанного времени между выводом

                 -1---2-3-4----5-6|
debounceTime(--) ----1-------4---6|
person Buggy    schedule 11.09.2018