遵循 Observable<Void> 的 RxJava 链调用

Ric*_*iço 2 java android rx-java

我一直在包装一个同步库,所以每个执行 IO 的方法都会返回一个Observable. 然而,其中一些方法返回,Observable<Void>因为我只关心它的完成情况。

如何在Observable不发出任何内容之后链接调用?

accountManager.doAuth()
            .flatMap(x -> paginator.next())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe(... subscriber stuff ...)
Run Code Online (Sandbox Code Playgroud)

我必须doAuth为每个请求调用它并返回Observable<Void>. 由于它不发出项目,onNext因此永远不会被调用,只有onCompleted.

关于doAuth我只关心它是否完成或给出错误。如果它完成,我希望它paginator.next()被调用,以便我可以在onCompleted/onError/onNext.

到目前为止,我一直在使用flatMap链式调用,当我真正关心以前的 Observables 返回的东西时,它工作得很好。

ele*_*ven 5

自发布1.1.1 RxJava以来Completable,完全符合您的要求。Observable<Void>您可以返回而不是返回Completable

public Completable doAuth(){
    return Completable.create(subscriber -> {
        //do auth
        if(authOk) subscriber.onCompleted();
        else subscriber.onError(throwable);
    });
}
Run Code Online (Sandbox Code Playgroud)

很棒的文章Completable:第一部分,第二部分

  • @Shvalb 在 `Completeable` 中有 `andThen()` 操作符,它的作用很像 `Observable` 中的 flatMap (2认同)