当 stream2 基于 stream1 时,如何避免 .zip(stream1, stream2, BiFun) 订阅 stream1 两次?
How do I avoid .zip(stream1, stream2, BiFun) subscribing to stream1 twice, when stream2 is based on stream1?
我在 android 中使用 firebase 处理一些复杂的数据。我需要保存引用,但我的 zip 操作或我处理 RX 的方式出现了问题。
我想用关于某个 B
的信息创建一个新的 A object
,并更新我的 B object
以获得关于创建的 A
的信息。当 firebase 操作都成功后,我将 return 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?
你真的不需要 zip
因为你可以简单映射 a
返回:
val singleA = firebaseCall(A("ABC", bKey))
return singleA.flatMap{ a -> firebaseCall(B(aKey)).map { a } }
我在 android 中使用 firebase 处理一些复杂的数据。我需要保存引用,但我的 zip 操作或我处理 RX 的方式出现了问题。
我想用关于某个 B
的信息创建一个新的 A object
,并更新我的 B object
以获得关于创建的 A
的信息。当 firebase 操作都成功后,我将 return 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?
你真的不需要 zip
因为你可以简单映射 a
返回:
val singleA = firebaseCall(A("ABC", bKey))
return singleA.flatMap{ a -> firebaseCall(B(aKey)).map { a } }