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

subscribing to an observable when another observable completes

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

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

不要重新订阅,return另一个Observable然后订阅。

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

编辑:当 api 调用 returns 时,flatMap 将拦截流,然后从那里,return 和 Observable 或调用return 是一个 Observable 的函数(即另一个 api 调用)。

如果它们都发出相同的项目,请使用 Observable.concat(),它会在可观察 N 完成后订阅可观察 N+1。但更详细地描述您的用例可能是值得的。

编辑:您应该可以执行以下操作:

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