我在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被执行两次?
答案 0 :(得分:1)
您可能不需要zip
,因为您可以简单地映射a
:
val singleA = firebaseCall(A("ABC", bKey))
return singleA.flatMap{ a -> firebaseCall(B(aKey)).map { a } }