Rx java 重复操作,并在新的重复观察值中使用新值
我正在从后端加载内容,我想要类似于分页的东西,但我不能使用.scan来增加“页面”,因为我实际上需要存储查询检索到的最后一个键,并且查询是在.scan之后运行的,所以我遇到了一个第22个难题 到目前为止,我的解决方案有点老套,因为我假设所有内容都在同一个线程中执行,然后我将所有内容包装在一个“Observable.Operator”类中,这样我就可以将所需的查询键存储在一个成员变量中(由于“lambda expression should effectively final”错误,所以无法将其存储在局部变量中)Rx java 重复操作,并在新的重复观察值中使用新值,rx-java,Rx Java,我正在从后端加载内容,我想要类似于分页的东西,但我不能使用.scan来增加“页面”,因为我实际上需要存储查询检索到的最后一个键,并且查询是在.scan之后运行的,所以我遇到了一个第22个难题 到目前为止,我的解决方案有点老套,因为我假设所有内容都在同一个线程中执行,然后我将所有内容包装在一个“Observable.Operator”类中,这样我就可以将所需的查询键存储在一个成员变量中(由于“lambda expression should effectively final”错误,所以无法将其存
所以我的问题是:有没有人知道一个好方法,一旦你调用retry/repeat(这个变量在开始时是完全未知的),就把一个变量带到新的可观察链的开始
PublishSubject<Integer> subject = PublishSubject.create();
subject
.flatMap(page -> Observable.just("stuff for page " + page))
.subscribe(stuff -> {
System.out.println("Got stuff = " + stuff);
});
subject.onNext(1);
subject.onNext(2);
PublishSubject=PublishSubject.create();
主题
.flatMap(页面->可观察的.just(“页面内容”+页面))
.订阅(资料->{
System.out.println(“Got stuff=“+stuff”);
});
主题.onNext(1);
主题.onNext(2);
这可能会给你一些想法(不知道你到底想要什么):
final-AtomicReference initialValue=new-AtomicReference();
最终T defaultInitialValue=。。。;
可观察。延迟(()->{
if(initialValue.get()==null)
source.scan(默认初始值,累加器);
其他的
scan(initialValue.get(),累加器);
})
.doOnNext(x->initialValue.set(x))
.重试()
.认购(……);
final AtomicReference<T> initialValue = new AtomicReference<T>();
final T defaultInitialValue = ...;
Observable.defer(() -> {
if (initialValue.get() == null)
source.scan(defaultInitialValue, accumulator);
else
source.scan(initialValue.get(), accumulator);
})
.doOnNext(x -> initialValue.set(x))
.retry()
.subscribe(...);