Выход из Observable.zip в rxjava в зависимости от состояния - PullRequest
0 голосов
/ 28 января 2019

В RXJava у меня есть 2 наблюдаемые, которые являются ответами от 2 нисходящих вызовов. Один нисходящий вызов - это длинный опросный вызов, другой - короткий и возвращается сразу.Я использую Observable.zip для объединения ответов обоих ответов. Приведенный ниже код работает нормально.

Observable
 .zip(observable1, observable2)
 .flatMap(update -> foo(update));

Теперь я хочу реализовать следующее: если вывод короткого нисходящего вызова (observable1)не содержит определенного значения, затем пропустите zip, т.е. не ждите вывода более длинного нисходящего вызова (observable2).Я попытался реализовать это следующим образом, но если условие истинно, оно не проникает с observable2, но даже не генерирует ответ observable1.

Observable finalresponse = observable1
                .takeWhile(obsResponse1 ->  checkIfValueExist(obsResponse1))
                .zipWith(observable2,  (observable1, observable2) -> execute(observable1, observable2))
                .flatMap(update -> main.execute(update));

1 Ответ

0 голосов
/ 29 января 2019

В zip есть правило, которое он будет возвращать, только если оба потока будут излучать элемент, поэтому вам нужно отфильтровать или вернуть Observable.empty () в наблюдаемом, если ваш объект не тот, который вы ожидаете или можетеиспользовать фильтр

   Observable
            .zip(Observable.just(1).filter(integer -> integer==1), Observable.just(2).filter(integer -> integer==3),(integer, integer2) -> integer)
            .flatMap(update -> foo(update));
...