【问题标题】:RxJava/RxKotlin: Wait for value to be fetched async and then provide to all subscribersRxJava/RxKotlin:等待异步获取值,然后提供给所有订阅者
【发布时间】:2020-08-22 11:51:29
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: kotlin asynchronous listener rx-java2 rx-kotlin2


    【解决方案1】:

    我认为您可以使用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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 2022-12-20
      • 2022-09-27
      • 2017-01-08
      • 2019-09-05
      相关资源
      最近更新 更多