0

観測可能なobs1、obs2、obs3、...、のリストがあります

それらのそれぞれは(mongodbデータベースから)いくつかのアイテムを発行できます。私は最初のN個のアイテムだけに興味があります。オブザーバブルのクエリが必要な場合にのみ実行されるようにしたいと考えています。つまり、たとえば obs1 が N を超える値を生成する場合、obs2 の背後にあるクエリは実行されるべきではありません。

concat: Observable(obs1, obs2, obs3, ...).concat を使用すると、すべてのクエリを mongodb で並列に実行できます。

基本的に、obs1.switchIfX(obs2).switchIfX(obs3)..... のような操作を探しています。

X: N 未満のアイテムが現在のオブザーバブルによって放出されます。

この要件を rxscala スタイルで実装する方法はありますか?

4

2 に答える 2

2

次のようなものを試すことができます(テストされていません):

Observable.just(obs1, obs2, obs3).flatten(maxConcurrent=1).take(N)

この引数は、一度に 1 つのオブザーバブルのみをサブスクライブするmaxConcurrentことを保証し、アイテムが発行されると、上流のオブザーバブルからサブスクライブを解除するため、その時点で、またはまだサブスクライブされていない場合、必要に応じて実行されることはありません。flattenNtakeobs2obs3

于 2017-12-13T05:30:54.930 に答える