调试停止的RxJava zip运算符

时间:2014-09-16 06:43:18

标签: java multithreading java-7 rx-java

用Java编写我调用zip()方法,该方法接收一些返回Observable< ...>的方法。

目前我无法进入下面的地图,这可能是因为其中一个方法尚未返回值。 (虽然似乎所有方法都被称为。)

有没有办法调试过程并查看它被卡住的原因?
感谢。

1 个答案:

答案 0 :(得分:5)

假设你有:

result = Observable.zip(sourceA, sourceB, sourceC)

只需在每个来源上添加.doOnNext()即可记录他们正在发布的内容(或代替doOnNext,订阅每个来源)。例如:

result = Observable.zip(sourceA.doOnNext(/*logging...*/),
                        sourceB.doOnNext(/*logging...*/),
                        sourceC.doOnNext(/*logging...*/))

可能发生的事情是,其中一个来源的排放频率与其他来源不同。当您严格知道所有源以相同的速度/频率发出事件时,必须使用zip。您可能想尝试使用combineLatest。两者之间的区别是:

  • zip:只有在发出所有第n个源项时,返回的Observable才会发出第n个'组合'项。请参阅diagram
  • combineLatest:返回的Observable在其任何源发出项目时会发出“组合”项。查看diagram