[英]RxJava2 create Flowable from listener and remove listener at the end
[英]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.