如何在不嵌套调用的情况下串行连接执行两个独立的Observable?

Nil*_*zor 3 java rx-java

使用RxJava我有一个Observable<A>和一个Observable<B>.我想在发出B第一个(也是唯一的)元素时立即开始订阅A.我知道我可以像这样链接它:

final Observable<A> obsOfA;
final Observable<B> obsOfB;
obsOfA.subscribe(new Action1<A>() {
        @Override
        public void call(A a) {
            obsOfB.subscribe(...)      
        }
});
Run Code Online (Sandbox Code Playgroud)

..但这会导致嵌套语法,一旦我们介绍就会变得丑陋Observable<C>.如何将语法"解包"到更流畅的语言 - 获得更像javascript Promise.then()-flow 的语法?

Ego*_*uba 5

你应该使用flatMap:

obsOfA.flatMap(new Func1<A, Observable<B>>() {
    @Override
    public Observable<B> call(A a) {
        return obsOfB;
    }
})
.subscribe(/* obsOfB has completed */);
Run Code Online (Sandbox Code Playgroud)

每次obsOfA调用时onNext(a),call都会以此值执行a.