Отладка zip-оператора RxJava, который останавливается

Написав на Java, я вызываю метод zip(), который получает несколько методов, возвращающих Observable‹...>.

В настоящее время я не могу перейти к следующей карте, и это, вероятно, связано с тем, что один из методов еще не вернул значение. (Хотя кажется, что все методы вызываются.)

Есть ли способ отладить процесс и понять, почему он завис?
Спасибо.


person Bick    schedule 16.09.2014    source источник


Ответы (1)


Предположим, у вас есть:

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

Просто добавьте .doOnNext() к каждому из источников, чтобы регистрировать то, что они испускают (или вместо doOnNext подпишитесь на каждый). Например:

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

Что, вероятно, происходит, так это то, что один из этих источников не излучает на той же частоте, что и другие. zip следует использовать, когда вы точно знаете, что все источники излучают события с одинаковой скоростью/частотой. Вы можете попробовать использовать combineLatest. Разница между ними заключается в следующем:

  • zip: возвращенный Observable испускает n-й элемент «комбинации» только тогда, когда все n-е элементы источников были испущены. См. диаграмму.
  • combLatest: возвращаемый Observable испускает «комбинированный» элемент всякий раз, когда какой-либо из его источников испускает элемент. См. диаграмму.
person André Staltz    schedule 16.09.2014