嵌套RxJava Observables的正确方法?

时间:2016-01-12 13:17:16

标签: java rx-java

我正在使用RxJava并嵌套Observables,如下所示。我想在另一个observable中调用一个observable,并让外部observable发出内部observable onNext的结果。它似乎有效,但我不确定这是正确的实现,因为我无法找到任何文件来确认。

public Observable<User> updateUser(final String id) {
    return Observable.create(new Observable.OnSubscribe<User>() {
        @Override
        public void call(final Subscriber<? super User> observer) {
                try {
                if (!observer.isUnsubscribed()) {
                    getUser(id).subscribe(new Action1<User>() {
                        @Override
                        public void call(User user) {
                            observer.onNext(user);
                                observer.onCompleted();
                            }
                        });
                    }
                } catch (Exception e) {
                    observer.onError(e);
                }
        }
    });
}

public Observable<User> getUser(final String id) {
...
}

1 个答案:

答案 0 :(得分:0)

当您进行subscribe转换时,请避免调用Observable,因为您必须注意@akarnokd和@zsxwing在评论中提到的所有问题。

我也会避免使用Observable.create,因为创建OnSubscribe实现涉及考虑背压以及随之而来的并发棘手业务。首选Observable.justObservable.fromObservable.rangeObservable.deferObservable.using(还有更多,请查看维基),为了更高级的目的,请实施SyncOnSubscribe

此代码可能涵盖您的用例:

public Observable<User> updateUser(final String id) {
    return getUser(id).doOnNext(user -> updateUser(user));
}

public void updateUser(User user) {
    //whatever you want here
}

public Observable<User> getUser(final String id) {
    ...
}