RxPY: настоящий дроссель, который испускает немедленно - PullRequest
0 голосов
/ 29 ноября 2018

Я ищу способ ограничения выбросов на Subject() без необходимости применения задержки, если значение не было получено в течение указанного промежутка времени.

Как я могу этого достичь?Есть ли оператор, который это делает?Я думаю, что Swift и JS Throttle действуют таким образом, но не RxPY.

from rx.subjects import Subject
from time import sleep
emitter = Subject()

def callback(item):
    print(item)

emitter.throttle(5000).subscribe(callback)

emitter.on_next('This should be emitted immediately')
sleep(1)
emitter.on_next('This should be emitted in 4 seconds')
sleep(6)
emitter.on_next('This should be emitted immediately')
sleep(1)
emitter.on_next('This should be emitted in 4 seconds, but will be replaced by the last value emitted in this 5 seconds period')
emitter.on_next('This should be emitted in 4 seconds, but will be replaced by the last value emitted in this 5 seconds period')
emitter.on_next('This should be emitted in 4 seconds, but will be replaced by the last value emitted in this 5 seconds period')
emitter.on_next('This should be emitted in 4 seconds')

Оператор throttle_first почти делает то, что я хочу.Он испускает сразу, но потом игнорирует значения.Я хочу, чтобы значение было отправлено немедленно, если за период ничего не было отправлено, и я хочу, чтобы последнее значение было в конце периода.

...