RxJava PublishSubject + Debounce: второй элемент не испущен - PullRequest
0 голосов
/ 04 июля 2018

Я хочу использовать PublishSubject + debounce (в логике подписки) для отправки моих товаров с задержкой. Это мой код:

Логика подписки:

notificationSubject = PublishSubject.create<Notification>()
notificationSubject
            .debounce(300, TimeUnit.MILLISECONDS)
            .doOnIOSubscribeOnMain() // ext. fun, I hope you understand it
            .subscribe {
                displayNotification(it)
            }

И излучать объекты логикой:

showNotification(obj1)
showNotification(obj2) 
// ...
fun showNotification(notification: Notification) {
    notificationSubject.onNext(notification)
}

Но при подписке я получаю только первый отправленный элемент (obj1). И если я снова испускаю два объекта (obj3, obj4), я получаю только первый из испущенного объекта (obj3).

Как это исправить?

1 Ответ

0 голосов
/ 04 июля 2018

Debounce - это оператор с потерями, который пропускает объекты, излучаемые слишком близко друг к другу. Вы не можете использовать это для удовлетворения ваших требований.

Вместо этого вы можете использовать zip с интервалом:

notificationSubject.zipWith(Observable.interval(300, TimeUnit.MILLISECONDS), (a, b) -> a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...