保持简单和简短,如何在另一个订阅者的onNext()方法中订阅一个observable,这样我们只能在当前observable完成执行时进行嵌套订阅。这两个订阅都将在不同的线程上进行,并且要求第一个线程必须在第二个线程启动之前完成其执行。
makeObservable()
.subscribeOn(Schedulers.newThread())
.subscribe(new Subscriber<User> {
@override
void onNext(User user){
//do something
//make another subscription here
});
答案 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(...)