自动完成从另一个Observable创建的Single

时间:2017-08-22 21:57:27

标签: rx-java2

我有一个长时间运行的操作,它返回一个我无法控制的代码中的值。我需要将这个价值发布到要求它的东西上。为此,我使用BehaviorSubject

var subject: Subject<Value>? = null

fun retrieveValue(): Single<Value> {

    if (subject == null) {
        subject = BehaviorSubject.create<Value>()

        someOtherThing.retrieveValueAsync { value ->
            subject.onNext(value)
        }
    }

    return subject.singleOrError()
}

这让我只执行一次操作,并将结果作为单个结果发送给所有未来感兴趣的各方。但是,它不起作用。在我打电话之前,单曲不会发出值:

subject.onComplete()

但这是一个问题,因为一旦主题完成,未来的事情就再也无法订阅了。

从另一个observable缓存值并将其传递给Single的适当方法是什么?如果有一个方法让一个主题自动完成,一旦其源可观察性发出一个可行的值。 Single.cache()也看起来很有希望,但我不确定如何处理这样一个事实:在这种情况下,我的价值是异步的。

感觉我错过了一些愚蠢的事情。

1 个答案:

答案 0 :(得分:0)

这种情况有SingleSubject

如果您不想在代码库中使用实验代码,可以使用ReplaySubject.createWithSize(1)并调用onComplete而不会丢失最后一个值,然后将其转换为Single