首页 > 解决方案 > Rxjava 2 combineLatest 错误

问题描述

我想从两个方法调用中收集第一次排放,这可以使用 Rxjava 2 的 combineLatest 来实现,但我对语法感到困惑

    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;
                }
            });*/
     }

标签: androidrx-javareactive-programmingrx-java2observer-pattern

解决方案


您可以使用take()运算符来限制可观察对象的数量。这意味着一旦两个可观察对象都发出一个值,它们combinerFunction将计算一个结果并且可观察对象将完成。

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

推荐阅读