2017-08-25 3 views
0

Flowableを作成して、ブロックごとに結果を送信する非同期REST APIエンドポイントから受け取った結果をストリーミングする必要があります。前の応答のヘッダーを使用して結果の残りのリスト)。バックプレッシャー戦略を使用するのではなく、必要に応じて(Flowableで要求された場合にのみ)後続のHTTPリクエストを送信するのを待ちます。RxJava2を使用して一連の非同期HTTPリクエストからフローレスを作成する

機能Flowable.generateは本当に私が望むものに近いですが、同期呼び出しでのみ機能するようです。そこには非同期呼び出しのためのこのような解決策がありますか、これを行うためのアドバイスがありますか?私が正しくあなたを理解している場合

おかげで

+0

私はhttps://stackoverflow.com/questions/28047272/handle-paging-with-rxjavaには解決策の指針があると思います –

答えて

0

私はわからないんだけど、私はあなたが次々と要求を実行するとしますと、あなたは次の要求を実行するために、以前の要求からいくつかのデータを必要とします。

私たちは、次のFlowableオブジェクトを持っている、のは、言ってみましょう:

Flowable<String> first = Flowable.fromCallable(() -> { 
    Thread.sleep(2000); 
    return "I need to be executed first"; 
}); 

Flowable<String> second = Flowable.fromCallable(() -> "I need to be executed later"); 

まずFlowableは遅くなりますが、我々はfirstsecondを実行したいです。

我々はconcat(...)オペレータに次のようにそれを行うことができます:要求が正しい順序で実行されるようにRxJavaのドキュメントによると

Flowable.concat(first, second).subscribe(System.out::println); 

は、CONCAT演算子は、それらをインターリーブすることなく、2つの以上の観測からの排出量を放出します。

最初の要求の条件に応じて、またはFlowableの最初のFlowableのデータを使用して、2番目の要求を実行することもできます。次のようにあなたがflatMap(...)オペレータとそれを達成することができます

:この例では

first.flatMap(
    s -> s.equals("I need to be executed first") 
     ? second 
     : Flowable.empty()) 
    .subscribe(System.out::println); 

を、二Flowableは、最初のものは、私たちがしたいとまったく同じであるときにのみ放出されます。そうでない場合は、空のFlowableが発行されます。 2番目の1に最初Flowableからのデータを使用したい場合は、ちょうどそのようsecondFlowableを返す代わりflatMap(...)オペレータ内に新しい、カスタムFlowableを作成することができます。

first.flatMap(
    s -> s.equals("I need to be executed first") 
     ? Flowable.fromCallable(() -> "I'm using data from the first Flowable: ".concat(s)) 
     : Flowable.empty()) 
    .subscribe(System.out::println); 

私は願って、この答えは役立ちます君は。

関連する問題