0

我有一个场景,我必须异步获取一些字符串。我想创建一个方法,当成功获取此值然后将其提供给侦听器时,我可以在其中收听。现在,这可以通过多种方式轻松完成,包括回调侦听器或 lambda。

但是我应该使用什么来使对该方法的所有后续调用也返回字符串 - 无需再次获取它,因为它已经被获取了一次。因此,侦听器仍处于连接状态但在可用时立即提供值的解决方案。我知道如何通过老式的回调监听器来做到这一点,该值被存储在其中,然后对于后续调用,它可以通过回调立即返回。

但是有没有更紧凑/更复杂的方法来做到这一点,比如说通过 Rx?

谢谢。

4

1 回答 1

0

我认为您可以只使用cache()运算符。它会是这样的:

val value: Single<String> by lazy {
    // emulation of your callback
    Single.create<String> { emitter ->
        Thread.sleep(1000)
        println("do some work")
        emitter.onSuccess("test")
    }.cache()
}

fun main() {
    value.subscribe { str -> println(str) }
    value.subscribe { str -> println(str) }
    value.subscribe { str -> println(str) }
    Thread.sleep(2000)
    // output:
    // do some work
    // test
    // test
    // test
}
于 2020-08-23T08:20:53.097 回答