【问题标题】:BehaviorSubject that drops the last value after it was emitted释放最后一个值的 BehaviorSubject
【发布时间】:2017-01-24 12:45:20
【问题描述】:

任何人都知道 BehaviorSubject 的自定义实现,一旦订阅者使用它就会丢弃最后一个值?

为什么这样的实现是个坏主意?

【问题讨论】:

  • 那你为什么使用 BehaviorSubject 使用 PublishSubject 代替。
  • 因为我希望价值一直存在,直到有订阅者为止。
  • 如果同时订阅多个订阅者,您是否希望所有订阅者在到达时都收到相同的值?单个订阅者可以消费多个值,还是在获得项目后立即取消订阅?
  • 这些是有效积分。假设我目前只想拥有一个订阅者,并且该订阅者应该保持订阅状态并消耗更多发出的值。
  • 如果该订阅者退订然后再次订阅怎么办? (我的情况)我想有一种机制来“消费”发出的值:如果某个订阅者收到一个值,则丢弃它。

标签: rx-java behaviorsubject


【解决方案1】:

我通过这种方式解决了这个问题:

<T> Observable<T> discardOnceDelivered(BehaviorSubject<T> subject) {
    return subject.filter(t -> t!=null).doOnNext(inputFields -> subject.onNext(null));
}

唯一的限制(在 Rx 1.x 中)是 null 值不被接受为有效的发出值,而是用于对丢弃最后一个值的操作进行编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-19
    • 2019-08-31
    • 1970-01-01
    • 2012-10-24
    • 2015-02-05
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    相关资源
    最近更新 更多