当另一个 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(...)
保持简单和简短,如何在另一个订阅者的 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(...)