协程中RxJava的share()的替代方法是什么?

时间:2019-02-27 10:01:52

标签: android rx-java2 kotlinx.coroutines

我有一个配置文件,正在获取它,结果得到了标题和查询列表:String 根据查询,我应该实施不同的请求 我的意思是我有request1的配置 根据request1的结果,我应该将其与request2,request3…组合在一起。 这些组合我想平行 我知道我可以使用const arr = [{"id":"5","name":"Immidiate"}, {"id":"4","name":"30 days"}, {"id":"3","name":"21 days"}, {"id":"2","name":"14 days"}, {"id":"1","name":"7 days"}, {"id":"6","name":"Custom"}]; const resultArray = arr.map(elm => ({ Name: elm.id, Data: elm.name})); console.log(resultArray); 使用RxJava来实现,但是如何使用协同程序来实现呢?

1 个答案:

答案 0 :(得分:1)

以非协程的方式考虑它,如果函数没有挂起而只是常规函数,您会怎么做?

您可以将发出的值存储在变量中,并检查是否已经缓存了它;如果有,则可以只返回这些值,否则,请计算这些值。

如果您需要听一些高级逻辑(例如RxJava的Subject s),则可以使用Kotlin协程Channel s。

要创建频道,可以使用Channel()ConflatedBroadCastChannel()或其他变体。如果希望您的频道与RxJava的PublishSubject完全一样,则可以使用ConflatedBroadCastChannel:

val broadCastChannel = ConflatedBroadcastChannel<Int>()

您可以使用broadCastChannel.offer(value)将值发送到通道。

要从通道接收值,可以使用简单的for-each循环:

for (i in broadCastChannel.openSubscription()) {
       //your values
}