Android Rx:发射器的条件定时器

问题描述 投票:0回答:1

我有

BehaviorSubject<Boolean>
,我想知道如何获得以下行为:

  • 当到来时
    False
    它应该等待10秒才能发出值
  • True
    到来时,它立即发出值,并且如果存在则取消之前的10秒计时器
android rx-java rx-kotlin
1个回答
0
投票

您需要一个

flatMap
来引入延迟,并需要一个
takeUntil
连接到其中,以便在 true 出现时取消延迟。

var subject = ...

subject.flatMap(value -> {
    if (value) {
        return Observable.just(true);
    }
    return Observable.just(false)
                     .delay(10, TimeUnit.SECONDS)
                     .takeUntil(
                         subject.filter(value2 -> value2)
                     );
});
© www.soinside.com 2019 - 2024. All rights reserved.