RxJava 2.0 - 如何组合Observable和Completable

Mar*_* G. 2 java rx-java2

假设有包含方法的界面:

Observable<Data> makeHttpCall(int param1, boolean param2);

Completable storeInDatabase(Data data);

Completable combinedCall(int param1, boolean param2);
Run Code Online (Sandbox Code Playgroud)

实现combineCall方法的最佳方法是:

  1. 从makeHttpCall获取数据
  2. 使用storeInDatabase存储它
  3. return store可在storeInDatabase完成时完成吗?

似乎在RxJava 1.0中可以执行Completable.merge(Observable),但merge似乎不再接受Observable.

Bar*_*ski 6

首先,我认为不merge适合您的需求,因为storeInDatabase必须对结果执行makeHttpCall而不是与其并行.

这应该适合你:

Completable combinedCall(int param1, boolean param2) {
    return makeHttpCall(param1, param2)
            .flatMapCompletable(new Function<Data, CompletableSource>() {
                @Override
                public CompletableSource apply(@NonNull Data d) throws Exception {
                    return storeInDatabase(d);
                }
            });
}
Run Code Online (Sandbox Code Playgroud)