4

を返すネットワーク呼び出しがObservableあり、最初のものに依存するのは rx ではない別のネットワーク呼び出しがObservableあり、どうにかしてすべてを Rx に変換する必要があります。

Observable<Response> responseObservable = apiclient.executeRequest(request);

実行後、次を返さない別の http 呼び出しを行う必要がありますObservable

responseObservable.map(response - > execute the no rx network call using the response.id) 

noRxClient.getInformation(response.id, new Action1<Information>() {
    @Override
    public void call(Information information) {
        //Need to return information with page response
    }
});

その後、このメソッドを呼び出して応答をレンダリングする必要があります

renderResponse(response, information);

非 rx 呼び出しを rx に接続してから、rxJava ですべてのレンダリング応答を呼び出すにはどうすればよいですか?

4

1 に答える 1

2

(RxJava1) または(RxJava2) および(非非同期呼び出しの場合) をObservable使用して、非同期の非 rx 呼び出しをラップできます。Observable.fromEmitterObservable.createObservable.fromCallable

private Observable<Information> wrapGetInformation(String responseId) {
    return Observable.create(emitter -> {
        noRxClient.getInformation(responseId, new Action1<Information>() {
            @Override
            public void call(Information information) {
                emitter.onNext(information);
                emitter.onComplete();
                //also wrap exceptions into emitter.onError(Throwable)
            }
        });
    });
}

private Observalbe<RenderedResponse> wrapRenderResponse(Response response, Information information) {
    return Observable.fromCallable(() -> {
        return renderResponse(response, information);
        //exceptions automatically wrapped
    });
}

オーバーロードされた flatMap演算子を使用して結果を結合します。

apiclient.executeRequest(request)
    .flatMap(response -> wrapGetInformation(response.id), 
            (response, information) -> wrapRenderResponse(response, information))
    )
    //apply Schedulers
    .subscribe(...)
于 2017-02-15T00:35:09.587 に答える