【发布时间】:2017-12-27 13:33:13
【问题描述】:
我在 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?
【问题讨论】:
-
为什么需要压缩它们?来自 A 的任何发射都将是 flatMapped,您只需订阅 B
-
方法签名应该返回
Single<A>,这就是为什么 -
您获得双重订阅,因为您在两种情况下的排放源是相同的,即 firebaseCall(A("ABC", bKey)),然后您可以自行压缩它,但如果需要,您可以使用 flatMapped只“映射”返回类型,然后只使用映射运算符
标签: android firebase-realtime-database reactive-programming rx-java2 rx-kotlin