我从后端加载东西,我想要一些类似于分页的内容,但是我不能使用.scan来增加"页面"因为我实际上需要存储查询检索到的最后一个密钥,并且查询是在.scan之后运行的,所以我遇到了问题22。
到目前为止我的解决方案有点hacky,因为我假设所有内容都在同一个线程中执行,然后我将所有内容都包含在一个' Observable.Operator' class,这样我就可以将所需的查询键存储在一个成员变量中(由于&#34,它不能将它存储在本地; lambda表达式应该是最终的"错误。
所以我的问题是:一旦你调用retry / repeat(这个变量在开始时是完全未知的),有没有人知道一个很好的方法将变量带到新的可观察链的开头?
答案 0 :(得分:1)
受救助的对象:
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);
答案 1 :(得分:0)
这可能会给你一些想法(不知道你想要什么):
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(...);