重复操作并在新的重复观察中使用新值

时间:2016-04-21 18:17:23

标签: rx-java

我从后端加载东西,我想要一些类似于分页的内容,但是我不能使用.scan来增加"页面"因为我实际上需要存储查询检索到的最后一个密钥,并且查询是在.scan之后运行的,所以我遇到了问题22。

到目前为止我的解决方案有点hacky,因为我假设所有内容都在同一个线程中执行,然后我将所有内容都包含在一个' Observable.Operator' class,这样我就可以将所需的查询键存储在一个成员变量中(由于&#34,它不能将它存储在本地; lambda表达式应该是最终的"错误。

所以我的问题是:一旦你调用retry / repeat(这个变量在开始时是完全未知的),有没有人知道一个很好的方法将变量带到新的可观察链的开头?

2 个答案:

答案 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(...);