当另一个observable完成时,订阅一个observable

时间:2016-08-31 13:43:02

标签: android multithreading rx-java rx-android

保持简单和简短,如何在另一个订阅者的onNext()方法中订阅一个observable,这样我们只能在当前observable完成执行时进行嵌套订阅。这两个订阅都将在不同的线程上进行,并且要求第一个线程必须在第二个线程启动之前完成其执行。

makeObservable()
.subscribeOn(Schedulers.newThread())
.subscribe(new Subscriber<User> {
    @override
    void onNext(User user){
    //do something
    //make another subscription here
});

2 个答案:

答案 0 :(得分:1)

请勿进行新订阅,请返回另一个Observable并订阅。

apiCall()
.subscribeOn(<scheduler>)
.observeOn(<scheduler>)
.flatMap(new Func1<User, Observable<Something>() {
    @Override
    public Observable<Something> call(User user) {
        return Observable.just(<example>);
    }
});

编辑:当api调用返回时,flatMap将拦截流,并从那里返回Observable或调用返回Observable的函数(即另一个api调用) )。

答案 1 :(得分:1)

If they're both emitting the same items, use Observable.concat(), which subscribes to observable N+1 after observable N completes. But it might be worth it to describe your use case in more detail.

Edit: You should be able to do something like:

userClient
.saveUser(user)
.flatMap(userSaveResult -> 
    userClient
   .saveUserDetails(userSaveResult.id, seuser.getDetails))
.onError(...)