簡體   English   中英

使用RxJava2使用generate函數創建可流動對象

[英]Create a flowable with generate function using RxJava2

我需要創建一個自定義Flowable並實現背壓。 我正在嘗試實現某種分頁。 這意味着當下游請求5個項目時,我將“詢問數據源”的項目0-5。然后,當下游需要另外5個項目時,我將獲得項目5-10,然后放回。

到目前為止,我發現最好的事情是使用Flowable.generate方法,但是我真的不明白為什么(就我所知)為什么沒有辦法獲得下游正在請求的requested數量的項目。 我可以使用generator的state屬性來保存最后請求的項的索引,因此我只需要新請求的項數。 我在BiFunction apply得到的Emmiter實例是GeneratorSubscription ,它是從AtomicLong擴展的。 因此,將發射器投射到AtomicLong可以獲得我要求的號碼。 但是我知道這不是“推薦”的方式。

另一方面,當您使用Flowable.create您會獲得具有long requested()方法的FlowableEmitter。 使用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)一樣。 因此,沒有理由為此而吸氣。 這不是我所希望的,但它顯然是如何generate的作品。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM