当stream2基于stream1时,如何避免两次订阅stream1的.zip(stream1,stream2,BiFun)?

时间:2017-12-27 13:33:13

标签: android firebase-realtime-database reactive-programming rx-java2 rx-kotlin

我在android中使用firebase和一些复杂的数据。我需要保存引用,我的zip操作或者整体处理RX的方式都有问题。

我想创建一个新的A object,其中包含有关某个B的信息,并更新我的B object以获取有关已创建的A的信息。当firebase操作都成功时,我将返回Single<A>

val singleA = firebaseCall(A("ABC", bKey))

val singleB = singleA.flatMap{ a -> firebaseCall(B(aKey)) }

return Single.zip(singleA, singleB, BiFunction { a, b -> a })

当浏览logcat时,我可以看到SingleA订阅了两次,并且两次推送到firebase。我想避免这个!

那么,当B依赖于A时,如何在A和B上使用zip功能;没有A被执行两次?

1 个答案:

答案 0 :(得分:1)

您可能不需要zip,因为您可以简单地映射a

val singleA = firebaseCall(A("ABC", bKey))

return singleA.flatMap{ a -> firebaseCall(B(aKey)).map { a } }