flatMap が探しているものだと思います。たとえば、次のメソッドがあるとします。
Observable<Foo> getFoo();
Observable<Bar> getBar(Foo foo); //needs a Foo first
この方法で効果的にチェーンできます。
getFoo().flatMap(new Func1<Foo, Observable<Bar>>() {
@Override
public Observable<Bar> call(Foo foo) {
return getBar(foo);
}
});
次に、結果をサブスクライブすることにより、最終結果バーでいくつかの計算を実行できますObservable<Bar>
(明確にするために完全な例を示します)。
getFoo().flatMap(new Func1<Foo, Observable<Bar>>() {
@Override
public Observable<Bar> call(Foo foo) {
return getBar(foo);
}
}).subscribe(new Action1<Bar>() {
@Override
public void call(Bar bar) {
//everything succeeded, so perform calculation to the Bar
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
//handle an error that occurred anywhere in the chain
}
});
Foo または Bar を取得するプロセスのどこかで発生したエラーは、Observable をサブスクライブするときに提供する Action1 によって処理されることに注意してください。もちろん、Java のせいで非常に冗長ですが、少なくとも Observables/callback 地獄のネストを回避します。