具有state的Observable.generator,其中新状态是异步更新的

时间:2018-04-24 03:06:11

标签: rx-java rx-java2

这是一个有点人为的例子,但请耐心等待。让我们说我有一个方法,如:

Single<String> getValue(int offset);

我想多次调用它,每次都传递一个不同的偏移量,但偏移量是基于先前返回的字符数。

所以也许getValue(0)会返回&#34; Cat&#34;。然后因为它返回了3个字符,我想调用getValue(3),这可能会返回&#34; Horse&#34;。然后统计返回的字符数,我的下一个电话将是getValue(8)

Observable.generate(initialState, generator)状态是偏移量似乎没有给我我想要的东西,因为它要求我的发电机返回下一个状态,我不一定知道。< / p>

我如何创建一个生成如上所述值的Observable?

1 个答案:

答案 0 :(得分:0)

我有兴趣看看是否有更简洁的解决方案,但这就是我现在正在运行的内容:

我已经定义了一个&#34;州&#34;保存偏移量的类,并委托给实际的实现。这利用了generate是同步的事实。

private static class State {
    private final int offset = 0;
    private final AnimalFetcher delegate;
    State(AnimalFetcher delegate) { this.delegate = delegate; }

    void getNextValue(Emitter<String> emitter) {
        delegate.getValue(offset)
            .doOnSuccess(animal -> offset += animal.size())
            .subscribe(emitter::onNext, emitter::onError);
    }
}

Observable<String> getAllTheAnimals() {
    return Observable.generate(
        () -> new State(this),
        State::getNextValue
    );
}