问题:点击一个端点,直到返回的项目列表为空。每个连续的呼叫都会有一个更新的packetId查询参数,这是最后一项的packetId。
设置:使用Rx适配器进行Retrofit2
尝试:
MyApiService api = retrofit.create(MyApiService.class);
Observable<Output> call = api.myCall(packetId);
call.repeat().takeUntil(output -> output != null && !output.isEmpty())
.compose(applySchedulers())
.subscribe(output -> {
packetId = output.lastPacketId();
onFetchOutput(output)
});
这里的packetId不会得到更新,因为observable将使用与之创建的相同的params命中。
一旦获取结果,我总是可以再次调用此方法。
问题:是否有反应方式这样做?我假设它会涉及一些以某种方式反馈结果的操作员。
答案 0 :(得分:0)
您可以使用PublishSubject
private static void test() {
PublishSubject<Integer> packetSubject = PublishSubject.create();
packetSubject
.flatMap(integer -> call()
.doOnNext(output -> {
if (output == null) {
packetSubject.onCompleted();
}
}))
.subscribe(output -> {
if (output != null) {
packetSubject.onNext(output.lastPacketId);
}});
packetSubject.onNext(1);
}