0

我想使用 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)。

如何解决?

4

1 回答 1

2

Debounce 是一个有损运算符,它会跳过彼此太靠近发射的项目。你不能用它来满足你的要求。

您可以使用间隔压缩:

notificationSubject.zipWith(Observable.interval(300, TimeUnit.MILLISECONDS), (a, b) -> a)
于 2018-07-04T09:04:36.243 回答