Rxjava 2 объединитьПоследняя ошибка - PullRequest
0 голосов
/ 06 июня 2018

Я хочу собрать первые выбросы от двух вызовов методов, которые могут быть достигнуты с использованием combLatest из Rxjava 2, но я путаюсь с синтаксисом

    Observable<Boolean> buildUseCaseObservable(Params params) {
    List<Observable> list = new ArrayList<>();        
    list.add(this.userRepository.fetchUserData());
    list.add(this.masterDataRepository.fetchLov());

    //I think the problem is in the syntax
    return Observable.combineLatest(list, new BiFunction<Boolean, Boolean, Boolean>() {
        @Override
        public Boolean apply(Boolean aBoolean, Boolean aBoolean2) throws Exception {
            System.out.println("FetchRegistrationData complete " + aBoolean + " " + aBoolean2);
            return aBoolean && aBoolean2;
        }
    });

    /* this works fine but it waits for onComplete() of both calls
    return Observable.zip(
            this.userRepository.fetchUserData(),
            this.masterDataRepository.fetchLov(),
            new BiFunction<Boolean, Boolean, Boolean>() {
                @Override
                public Boolean apply(@NonNull Boolean aBoolean, @NonNull Boolean aBoolean2) throws Exception {
                    System.out.println("FetchRegistrationData complete " + aBoolean + " " + aBoolean2);
                    return aBoolean && aBoolean2;
                }
            });*/
     }

1 Ответ

0 голосов
/ 06 июня 2018

Вы можете ограничить количество наблюдаемых с помощью оператора take().Это означает, что как только обе наблюдаемые передадут значение, combinerFunction вычислит результат, и наблюдаемая будет завершена.

return Observable.combineLatest(
  this.userRepository.fetchUserData().take(1),
  this.masterDataRepository.fetchLov().take(1),
  combinerFunction)
...