Rx java 使用RxJava重复改装调用,直到条件有效

Rx java 使用RxJava重复改装调用,直到条件有效,rx-java,retrofit2,reactivex,Rx Java,Retrofit2,Reactivex,问题:点击端点,直到返回的项目列表为空。每个连续调用都会有一个更新的packetId查询参数,它是最后一个项的packetId 设置:使用Rx适配器改装2 尝试: myapiserviceapi=reformation.create(MyApiService.class); 可观察调用=api.myCall(packetId); call.repeat().takeUntil(output->output!=null&&!output.isEmpty()) .compose(applySched

问题:点击端点,直到返回的项目列表为空。每个连续调用都会有一个更新的packetId查询参数,它是最后一个项的packetId

设置:使用Rx适配器改装2

尝试

myapiserviceapi=reformation.create(MyApiService.class);
可观察调用=api.myCall(packetId);
call.repeat().takeUntil(output->output!=null&&!output.isEmpty())
.compose(applySchedulers())
.订阅(输出->{
packetId=output.lastPacketId();
onFetchOutput(输出)
});
在这里,packetId不会得到更新,因为observable将使用它创建时使用的相同参数命中

一旦获取结果,我总是可以再次调用此方法


问题:有没有一种反应式的方法?我假设它将涉及某种操作符,该操作符以某种方式反馈结果。

您可以使用
PublishSubject

private静态无效测试(){
PublishSubject packetSubject=PublishSubject.create();
包装主题
.flatMap(整数->调用()
.doOnNext(输出->{
if(输出==null){
packetSubject.onCompleted();
}
}))
.订阅(输出->{
if(输出!=null){
packetSubject.onNext(output.lastPacketId);
}});
packetSubject.onNext(1);
}