Rx java 链独立观测值
我想做类似的事情: 我有3个休息电话。第一个反馈给第二个反馈。但是,第三次通话中没有任何内容。我只需要确保它在第二个之后运行。因此,我在这里寻找类似于链的方法:Rx java 链独立观测值,rx-java,Rx Java,我想做类似的事情: 我有3个休息电话。第一个反馈给第二个反馈。但是,第三次通话中没有任何内容。我只需要确保它在第二个之后运行。因此,我在这里寻找类似于链的方法: result1Observable.subscribe(new Observer<result1>() { @Override public void onNext(result1 firstRestCallResult) { restCall2(firstRestCallResult).chain(
result1Observable.subscribe(new Observer<result1>() {
@Override public void onNext(result1 firstRestCallResult) {
restCall2(firstRestCallResult).chain(restCall3);
}
}
因为restCall3可能不会返回任何内容,所以通常的map、flatMap等操作符可能会有点棘手—类型不会对齐
有点难看,但可能会使用mergeWith操作符。restCall3只调用onCompleted,不发出任何值。将事物保持在可观察的链中应确保如果任何操作出错或未能完成,整个链将出错或未能完成,包括RESTCALL 3
[注意:我实际上没有尝试前面的代码]
我假设restCall3成功完成对您来说很重要。如果您不特别在意,您可能会将前两个观测值平面映射并使用doOnCompleted,并且Rx应该确保只有在前面两个观测值都成功完成时才会调用它
public Observable<UserStatus> execChain() {
return login()
.flatMap(responseBody -> getUserStatus(responseBody)
.mergeWith(restCall3()));
}
public Observable<ResponseBody> login() {
...
}
public Observable<UserStatus> getUserStatus(ResponseBody responseBody) {
...
}
public <T> Observable<T> restCall3() {
return Observable.create(new Observable.OnSubscribe<T>() {
@Override
public void call(Subscriber<? super T> subscriber) {
//execute blocking call
performRestCall();
subscriber.onCompleted();
}
});
}