使用RxJava2创建一个带有生成函数的流程图

我需要创建一个自定义Flowable背压执行。 我试图实现某种分页。 这意味着当下游请求5个项目时,我将“询问数据源”中的项目0-5。然后,当下游需要另外5个项目时,我将得到项目5-10并且返回。

到目前为止我发现的最好的事情是使用Flowable.generate方法,但我真的不明白为什么没有办法(据我所知)如何获得下游请求的项目数量。 我可以使用生成器的state属性来保存最后一个项目的索引,所以我只需要新请求的项目的数量。 我在BiFunction中apply的发件人实例是从AtomicLong扩展的GeneratorSubscription 。 所以将emmiter投射到AtomicLong可以得到我要求的号码。 但是我知道这不能成为“推荐”的方式。

另一方面,当你使用Flowable.create你会得到FlowableEmitter,它有long requested()方法。 使用generate更适合我的用例,但现在我也好奇什么是使用Flowable.generate的“正确”方法。

也许我正在想办法让所有的东西都指向正确的方向。 :) 谢谢。

这就是实际代码的样子(在Kotlin中):

 Flowable.generate(Callable { 0 }, BiFunction { start /*state*/, emitter -> val requested = (emitter as AtomicLong).get().toInt() //this is bull*hit val end = start + requested //get items [start to end] -> items emmiter.onNext(items) end /*return the new state*/ }) 

好吧,我发现BiFunction的apply函数被调用的次数是请求量(n)的很多倍。 所以没有理由有一个getter的。 这不是我所希望的,但显然是如何generate作品。 🙂

Interesting Posts