2

バックグラウンド

RX for Java の概念に飛び込んでいます。率直に言って、わかりません。私のプロジェクトでは、サービスを呼び出すために改造ライブラリを使用しています。現在、コールバックを使用してすべてのサービスを実装しています。サービス呼び出しを調整したい場合は、コールバック内でコールバックを呼び出さなければならず、コードがかなり混乱します。

問題

次の 2 つのサービスでは、Observables アプローチを使用してサービス A が正常に完了した場合に、サービス B を呼び出したいと考えています。

public interface RetrofitRestService {

    @GET("...")
    Observable<Object> A();

    @GET("...")
    Observable<Object> B();
}

私は自分のタスクに使用できるObservable オペレーターを探していましたが、運がありませんでした。次のような演算子を想像できます。

RetrofitRestServices service;
service.A().ifSuccessfull(B());

//OR
service.A().ifWasNotEmpty(B());

//OR
service.A().useCondition(new Condition(){ ... }, B());
4

2 に答える 2

3

A を呼び出してから B を呼び出したい場合は、演算子を使用できますconcat。A が完了すると B が呼び出されます。

service.A().concatWith(service.B()).subscribe();

しかし、A が返さnullれると、B が呼び出されます。

その場合は、この anwser の方が良いでしょう: https://stackoverflow.com/a/28685808/476690

コメント後に編集

A()then演算子の結果を使用する場合は、flatMap必要なものです

service.A().flatMap(resultOfA -> service.B(resultOfA)).subscribe();

resultOfA(引数として与えることB()は、使用例にすぎません)

別の方法 :

A の応答と B の応答からも結果を作成できます。

service.A().flatMap(resultOfA -> service.B().zipWith(Observable.just(resultOfA), (a, b) -> new ResultOf(a, b))).subscribe();

zipこの場合、演算子は A と B の結果で結果を構築します。ResultOfは、A と B の結果を使用して結果を作成する方法を示すクラスの例にすぎません。

詳細flapMap: RxJava で map と flatMap をいつ使用しますか?

于 2015-02-24T09:18:29.427 に答える