バックプレッシャを実装したカスタムFlowableを作成する必要があります。私はある種のページングを達成しようとしています。つまり、下流側で5つのアイテムをリクエストすると、アイテム0〜5を「データソースに尋ねる」ことを意味します。その後、下流で別の5が必要になると、アイテム5〜10が取得され、返されます。RxJava2を使用して生成関数を使用してフロアブルを作成する
Flowable.generate
メソッドを使用するのが最善の方法ですが、実際には(私が知っている限り)どのようにダウンストリームが要求している項目の数を取得するのか理解できません。私は発電機のstate
プロパティを使用して、最後に要求されたアイテムのインデックスを保存することができます。したがって、新しく要求されたアイテムの数だけ必要です。私がBiFunction apply
に入れたemmiterのインスタンスは、AtomicLong
から伸びているGeneratorSubscription
です。だからAtomicLong
に私は要求番号を得ることができるemmiterをキャスティング。しかし、私はこれが "推奨された"方法ではないことを知っています。
一方、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*/
})