gpt4 book ai didi

rx-java - 使用 RxJava 重复改造调用,直到条件有效

转载 作者:行者123 更新时间:2023-12-03 21:35:35 25 4
gpt4 key购买 nike

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

设置 : Retrofit2 带 Rx 适配器

尝试 :

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 将使用与它创建时相同的参数。

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

问题 : 有没有一种被动的方式来做到这一点?我假设它将涉及一些以某种方式反馈结果的运算符(operator)。

最佳答案

您可以使用 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);
}

关于rx-java - 使用 RxJava 重复改造调用,直到条件有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35907946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com