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

问题描述 投票:1回答:1

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

Single<String> getValue(int offset);

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

所以也许getValue(0)会回归“猫”。然后因为它返回3个字符,我想调用getValue(3),它可能会返回“Horse”。然后统计返回的字符数,我的下一个电话将是getValue(8)

Observable.generate(initialState, generator)状态是偏移量似乎没有给我我想要的东西,因为它要求我的生成器返回下一个状态,我不一定知道。

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

rx-java rx-java2
1个回答
0
投票

我很想知道是否有更简洁的解决方案,但这就是我现在正在运行的:

我已经定义了一个保存偏移量的“State”类,并委托给实际的实现。这利用了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
    );
}
© www.soinside.com 2019 - 2024. All rights reserved.