По самой своей природе, Observable
, который не выдает значений, а затем завершает (что и делает Observable.empty()
), не будет передавать значения вашему подписчику или любому последующему шагу вашей цепочки.
Observable<String> observable = Observable.empty();
observable
.map( value -> "Value " + value )
.doOnNext( value -> logger.info( "Value is " + value )
.subscribe();
Если вы выполните приведенный выше код, ничего не будет зарегистрировано, и сопоставление значений не произойдет.
С другой стороны, если вы имели в виду наблюдаемое, которое не испускает никаких значений и никогда не завершает (что делает Observable.never()
), это немного сложнее. Вам нужно будет ввести таймер, который выдает ошибку по таймауту, завершив тем самым цепочку наблюдателей.
Observable<String> observable = Observable.never();
observable
.map( value -> "Value " + value )
.doOnNext( value -> logger.info( "Value is " + value )
.timeout( 1, TimeUnit.SECONDS ) // (1)
.onErrorResumeNext( Observable.empty() ) // (2)
.subscribe();
В строке, отмеченной (1), применяется тайм-аут, а в строке, отмеченной (2), используется пустой поток для прекращения наблюдаемой цепочки.