当stream2基于stream1时,如何避免.zip(stream1,stream2,BiFun)两次订阅stream1?
问题描述:
我在android中使用firebase和一些复杂的数据。我需要保存引用,并且遇到了zip操作的问题,或者我处理RX的方式。当stream2基于stream1时,如何避免.zip(stream1,stream2,BiFun)两次订阅stream1?
我想创建一个新的A object
关于某种B
信息,并更新我的B object
有信息关于创建A
。当火力业务均出现了成功,我将返回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
获得认购到两次,两次推到火力点。我想避免这个!
那么,当B依赖于A时,如何在A和B上使用zip函数;没有A被执行两次?
答
你并不真的需要zip
为此,你可以简单的地图a
回:
val singleA = firebaseCall(A("ABC", bKey))
return singleA.flatMap{ a -> firebaseCall(B(aKey)).map { a } }
为什么你需要压缩它们?从A发出的任何辐射都是平面图,你可以订阅B – elmorabea
方法签名应该返回'Single ',这就是为什么 – Yokich
你会得到双重订阅,因为你在两种情况下的排放源是相同的,这就是firebaseCall(A “ABC”,bKey)),然后你用自己压缩它,但是如果你想只映射返回类型,那么只需使用map operator – elmorabea