【发布时间】:2017-08-30 03:49:51
【问题描述】:
我想实现一个zip,即当其中一个可观察源发出数据时,它不会等待其他可观察源发出数据,而是获取最新发出的数据(如果有)。
obs1 --true-|->
obs2 --true-|->
obs3 --1-2-3-4->
zip 应该执行带有参数的TriFunction
true, true, 1
true, true, 2
true, true, 3
true, true, 4
我希望我的问题有意义。
扩展问题
我已经解决了部分问题,我还有一个问题要给你们。
obs1 和 obs2 是昂贵的操作,它们将发出 true 或 false。我需要的是,在 obs3 的每次发射中,如果 obs1 或 obs2 在之前的发射中它们中的任何一个发射 false,我都需要重新执行。我在上面写的最好的情况是obs1 和obs2 在obs3 的第一次发射时发射true。
-------1------------2-----------------3------------->
---true/false---true/re-execute---true/re-execute--->
---true/false---true/re-execute---true/re-execute--->
编辑“两者”在扩展问题上具有误导性。
我的意思是,如果 obs1 在之前的发射中为假,请重新执行 obs1。如果obs2 在之前的发射中为假,则重新执行obs2。如果其中之一是false,则不要重新执行它们。
【问题讨论】:
-
那么,您是说要合并每个来源的最新值?在这种情况下,您正在寻找
combineLatest- 是的,有时 RxJava 真的是那么明显。 :-) -
事情就是这样,我得到了 1 个 observable,它需要来自 2 个 observable 的数据才能继续进行(有点像要求)。而且这些要求很昂贵,因此只执行一次是理想的。 @david.mihola
-
哦,是的 combineLatest 是最合适的。谢谢@david.mihola
-
顺便问一下@david.mihola,如果其中一个来源完成会发生什么?
-
@david.mihola 我运行了一个简单的代码来验证。 combineLatest 在完成之前等待最后一个 observable 完成。 gist.github.com/novodimaporo/06be7555fb579bd2a58392122f81a917